繁体   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