我有以下代码:
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
答案 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")