[英]Importing nested list into a text file
我一直在研究一個問題,我意識到我可能正在走錯路,但現在卻感到困惑和想法不清。 我所做的任何研究都使我更加困惑,因此我來尋求幫助。
我有一個嵌套列表:
[['#Name Surname','Age','Class','Score','\\ n'],['name','9','B','N / A','\\ n'] ,['name1','9','B','N / A','\\ n'],['name2','8','B','N / A','\\ n'] ,['name3','9','B','N / A','\\ n'],['name4','8','B','N / A',']]
我正在嘗試使它以正確的布局導入到文本文件中。 為此,我將字符串弄平,然后將其與“,”連接在一起。
這樣做的問題是,因為'\\ n'是存儲在列表本身中的,所以它在此之后添加了一個逗號,最后變成了:
姓名,年齡,班級,分數,
名稱9,B,N / A,
名稱1,9,B,N / A,
名稱2,8,B,N / A,
名稱3,9,B,N / A,
名稱4,8,B,N / A,
變成:
姓名,年齡,班級,分數,
,
,名稱,9,B,N / A,
,名稱1,9,B,不適用,
,名稱2,8,B,不適用,
,名稱3,9,B,N / A,
,名稱4,8,B,不適用,
如果我從代碼中刪除\\ n,由於沒有新行,因此文本文件中的格式全部錯誤。
是否有更好的方法可以解決此問題,或者可以快速解決所有我看不到的問題?
謝謝!
我的代碼供參考:
def scorestore(score):
user[accountLocation][3] = score
file = ("classdata",schclass,".txt")
file = "".join(file)
flattened = [val for sublist in user for val in sublist]
flatstring = ','.join(str(v) for v in flattened)
accountlist = open(file,"w")
accountlist.write(flatstring)
accountlist.close()
我不確定您的帖子中的哪個列表(子列表?),但是當您展平它時,只需丟棄“ \\ n”字符串:
flattened = [x for x in sublist if x != ["\n"]]
最簡單的方法可能是從子列表中刪除換行符,然后一次打印每個子列表。 這看起來像:
for sublist in users:
print(",".join(val for val in sublist if not val.isspace()), file=accountlist)
但是,這將失敗於列表中的0。 我不確定您是否打算處理這個問題,或者它是否無關緊要。 如果確實需要處理,那么str(val) for val in sublist if not str(val).isspace()
,則必須將str(val) for val in sublist if not str(val).isspace()
的生成器表達式更改為str(val) for val in sublist if not str(val).isspace()
。
不用編寫一個字符串,而是編寫行。 使用這樣的東西:
list_of_list = [[...]]
lines = [','.join(line).strip() for line in list_of_list]
lines = [line for line in lines if line]
open(file,'w').writelines(lines)
使用csv
模塊使其更容易:
import csv
data = [
['# Name Surname', 'Age', 'Class', 'Score','\n'],
['\n'],
['Name', '9', 'B', 'N/A','\n'],
['Name1', '9', 'B', 'N/A','\n'],
['Name2', '8', 'B', 'N/A','\n'],
['Name3', '9', 'B', 'N/A','\n'],
['Name4', '8', 'B', 0]
]
# Remove all the ending new lines
data = [row[:-1] if row[-1] == '\n' else row for row in data]
# Write to file
with open('write_sublists.csv', 'wb') as f:
writer = csv.writer(f)
writer.writerows(data)
您的數據是不規則的:有些行包含結尾的換行符,有些行則沒有。 然而,有些行包含所有字符串,而另一行包含混合數據類型。 第一步是通過刪除所有結尾的新行來對其進行規范化。 csv
模塊可以很好地處理混合數據類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.