所以我有這個txt檔案:
Haiku
5 *
7 *
5 *
Limerick
8 A
8 A
5 B
5 B
8 A
我想撰寫一個回傳如下內容的函式:
[['Haiku', '5', '*', '7', '*', '5', '*'], ['Limerick', '8', 'A', '8', 'A', '5', 'B', '5', 'B', '8' ,'A']]
我試過這個:
small_pf = open('datasets/poetry_forms_small.txt')
lst = []
for line in small_pf:
lst.append(line.strip())
small_pf.close()
print(lst)
最后我得到了這個:
['Haiku', '5 *', '7 *', '5 *', '', 'Limerick', '8 A', '8 A', '5 B', '5 B', '8 A']
我的問題是這是一個很大的串列,并且串列的元素連接在一起,例如“5 *”或“8 A”。老實說,我不知道從哪里開始,這就是為什么我需要一些指導來解決這兩個問題。任何幫助將不勝感激。
uj5u.com熱心網友回復:
當你看到一個空行時:不要添加它,保存你一直在填寫的 tmp 串列,然后繼續
lst = []
with open('test.txt') as small_pf:
tmp_list = []
for line in small_pf:
line = line.rstrip("\n")
if line == "":
lst.append(tmp_list)
tmp_list = []
else:
tmp_list.extend(line.split())
if tmp_list: # add last one
lst.append(tmp_list)
print(lst)
# [['Haiku', '5', '*', '7', '*', '5', '*'],
# ['Limerick', '8', 'A', '8', 'A', '5', 'B', '5', 'B', '8', 'A']]
uj5u.com熱心網友回復:
首先將檔案拆分為空白行 ( \n\n) 上的部分,然后將每個部分拆分為任何空格(換行符或空格)。
lst = [section.split() for section in small_pf.read().split('\n\n')]
結果:
[['Haiku', '5', '*', '7', '*', '5', '*'],
['Limerick', '8', 'A', '8', 'A', '5', 'B', '5', 'B', '8', 'A']]
uj5u.com熱心網友回復:
不使用額外模塊的解決方案
small_pf = small_pf.readlines()
result = []
tempList = []
for index,line in enumerate(small_pf):
if line == "\n" or index == len(small_pf) -1:
result.append(tempList.copy())
del tempList[:]
else:
for value in line.strip("\n").split():
tempList.append(value)
result
帶模塊的解決方案
您可以使用正則運算式來解決您的問題:
import re
small_pf = small_pf.read()
[re.split("\s|\n", x) for x in re.split("\n\n", small_pf)]
輸出
[['Haiku', '5', '*', '7', '*', '5', '*'],
['Limerick', '8', 'A', '8', 'A', '5', 'B', '5', 'B', '8', 'A']]
uj5u.com熱心網友回復:
此方法假定一行以十進制值或非十進制值的字符開頭。此外,它假設如果它以非十進制值開頭,則應該以行(作為字串,沒有任何尾隨空格)作為第一個元素開始一個新串列。如果后續行以十進制值開頭,則這些行將去除尾隨空格,并且行的部分內容(通過與空格分隔來確定)作為元素添加到最近創建的串列中。
lst = []
with open("blankpaper.txt") as f:
for line in f:
# ignore empty lines
if line.rstrip() == '':
continue
if not line[0].isdecimal():
new_list = [line.rstrip()]
lst.append(new_list)
continue
new_list.extend(line.rstrip().split(" "))
print(lst)
輸出
[['Haiku', '5', '*', '7', '*', '5', '*'], ['Limerick', '8', 'A', '8', 'A', '5', 'B', '5', 'B', '8', 'A']]
我希望這有幫助。如果有任何問題,請告訴我。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/455929.html
