将嵌套列表导入文本文件

时间:2016-10-11 16:22:29

标签: python python-3.x

我一直在研究一个问题,我意识到我可能接近错误的方式,但现在我感到困惑和想法。我所做的任何研究都让我更加困惑,因此我来寻求帮助。

我有一个嵌套列表:

  

[['#姓名姓氏','年龄','课程','分数',' \ n&# 39;],['名称',' 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','']]

我正在努力使这个列表以正确的布局导入到文本文件中。为此,我将绳子弄平,然后将其与“#”,“#39;”连接在一起。

这个问题是因为' \ n'正在存储在列表本身中,它在此之后添加一个逗号,最终转为:

  

姓名姓,年龄,班级,分数,

     

名称,9,B,N / A,

     

Name1,9,B,N / A,

     

Name2,8,B,N / A,

     

Name3,9,B,N / A,

     

Name4,8,B,N / A,

成:

  

姓名姓,年龄,班级,分数,

     

     

,名称,9,B,N / A,

     

,Name1,9,B,N / A,

     

,Name2,8,B,N / A,

     

,Name3,9,B,N / A,

     

,Name4,8,B,N / A,

如果我从代码中删除了\ 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()

4 个答案:

答案 0 :(得分:1)

我不确定哪个列表是您帖子中的列表(子列表?)但是当你展平它时,只需丢弃“\ n”字符串:

flattened = [x for x in sublist if x != ["\n"]]

答案 1 :(得分:0)

最简单的方法可能是在获取子列表时从子列表中删除换行符,一次打印一个子列表。这看起来像是:

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()

答案 2 :(得分:0)

而不是制作一个字符串,如何写行。使用这样的东西:

 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)

答案 3 :(得分:0)

使用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模块可以很好地处理混合数据类型。