将列表列表写入文本文件,一次写入一个列表

时间:2018-11-07 13:30:03

标签: python list tuples

我有以下代码:

data=[(24, 'Sale', 0, 15), (16, 'Buy', 18, 0)]
with open('txt_file.txt', 'w') as x:
    for sub_list in data:
        for item in sub_list:  #Since attempt to write whole giv error
            print(item)      
            x.write(str(item) + '   ')

如何从“数据”(一个列表列表)中提取一个列表,将其写成一行,然后移至下一行,然后再提取另一列表?我需要文本文件看起来像:

24 Sale 0 15
16 Buy 18 0

5 个答案:

答案 0 :(得分:3)

最简洁的方法如下:

with open('txt_file.txt', 'w') as x:
    x.write('\n'.join(' '.join(map(str, row)) for row in data))

答案 1 :(得分:3)

我认为您可以在退出内部循环之后编写换行符,并且您的代码也可以工作(即使最后一项后面有空格)。

for item in sub_list:  #Since attempt to write whole giv error
    x.write(str(item) + '   ')
x.write('\n')

但是,内置的csv模块会自动处理字符串,整数等列表(也可以通过引用引号来处理其中带有空格的字符串):

data=[(24, 'Sale', 0, 15), (16, 'Buy', 18, 0)]
with open('txt_file.txt', 'w', newline="") as x:
   csv.writer(x,delimiter=" ").writerows(data)

writerows方法能够编写元组或列表的集合。正是您所需要的。唯一的区别是csv不能将数据分隔多个字符(不允许使用多字符分隔符)。您必须占用1个空格。

答案 2 :(得分:0)

尝试一下:

with open('txt_file.txt','wt') as f:
    [f.write(' '.join([str(it) for it in item])+'\n') for item in data]

答案 3 :(得分:-1)

我的方法基于您的想法进行了一些调整(1.使用格式模板,以便您可以调整最终视图,而2)使用解压缩。)最终代码看起来像,分开制作适当的格式模板:

data=[(24, 'Sale', 0, 15), (16, 'Buy', 18, 0)]
FMT = '{}   {}   {}'

with open('txt_file.txt', 'w') as x:
    for item in data:
        record = FMT.format(*item)
        print(record)
        x.write(record + '\n')

答案 4 :(得分:-2)

"\n"可以做到:

data=[(24, 'Sale', 0, 15), (16, 'Buy', 18, 0)]
with open('txt_file.txt', 'w') as x:
    for sub_list in data:
        for item in sub_list:  #Since attempt to write whole giv error
            print(item)      
            x.write(str(item) + '   ')
        x.write("\n")