簡體   English   中英

將嵌套列表導入文本文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM