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