Python 将列表列表写入文本文件,一次写入一个列表
我的代码如下:Python 将列表列表写入文本文件,一次写入一个列表,python,list,tuples,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) +
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
最简洁的方法是:
with open('txt_file.txt', 'w') as x:
x.write('\n'.join(' '.join(map(str, row)) for row in data))
最简洁的方法是:
with open('txt_file.txt', 'w') as x:
x.write('\n'.join(' '.join(map(str, row)) for row in data))
试试这个:
with open('txt_file.txt','wt') as f:
[f.write(' '.join([str(it) for it in item])+'\n') for item in data]
试试这个:
with open('txt_file.txt','wt') as f:
[f.write(' '.join([str(it) for it in item])+'\n') for item in data]
我认为您可以在退出内部循环后编写一个换行符,这样代码就可以工作了(即使最后一项后面有空格) 但是,内置的
csv
模块会自动处理字符串、整数等的列表(也会通过引用来处理其中包含空格的字符串):
writerows
方法能够编写元组或列表的集合。正是你需要的。唯一的区别是csv
不能用多个字符分隔数据(不允许使用多字符分隔符)。您将不得不使用1个空格。我认为您可以在退出内部循环后编写一个换行符,您的代码将正常工作(即使最后一项后面有空格)
但是,内置的csv
模块会自动处理字符串、整数等的列表(也会通过引用来处理其中包含空格的字符串):
writerows
方法能够编写元组或列表的集合。正是你需要的。唯一的区别是csv
不能用多个字符分隔数据(不允许使用多字符分隔符)。您将不得不使用1个空格。“\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")
“\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")
我的方法基于您的想法,并进行了一些调整(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')
我的方法基于您的想法,并进行了一些调整(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')
您当前的代码有什么问题?缺少换行符,基本上您当前的代码有什么问题?缺少换行符,基本上不使用理解来进行循环。此外,它不适用于OP数据。修复了OP的情况。请测试您的解决方案,因为它也不能正常工作。再次修复,但我同意它正在变得越来越复杂,至少它可以工作。请考虑<代码> F.WordelsIs/COD>而不是理解。并将生成器表达式传递给writelines。比仅仅为了副作用而使用压缩要好得多不要仅仅为了循环而使用理解。此外,它不适用于OP数据。修复了OP的情况。请测试您的解决方案,因为它也不能正常工作。再次修复,但我同意它正在变得越来越复杂,至少它可以工作。请考虑<代码> F.WordelsIs/COD>而不是理解。并将生成器表达式传递给writelines。比仅仅为了副作用而使用压缩要好得多
FMT='{}{}{}{}'.format({},{},{},{})
???为什么不干脆FMT=“{}{}{}”
?另外,你测试过你的代码吗?嗯。有4个参数,而不是3个。为什么不在您的格式中包含换行符?如果不指定结束,则会正确写入,但不会打印。毕竟,使用格式模板和解包的想法还是一样的。FMT='{}{}{}{}'。格式({},{},{},{})
???为什么不干脆FMT=“{}{}{}”
?另外,你测试过你的代码吗?嗯。有4个参数,而不是3个。为什么不在您的格式中包含换行符?如果不指定结束,则会正确写入,但不会打印。毕竟,使用格式模板和解包的想法仍然是一样的。但这并不优雅,而且你的csv解决方案可以更好地处理这些琐碎的废话,也就是说,原始解决方案能够创建一个多间隔的分隔符。但这并不优雅,你的csv解决方案可以更好地处理这些琐碎的问题,就像原始解决方案能够创建多间隔分隔符一样。如果解决了你的问题,你可以接受答案。如果解决了你的问题,你可以接受答案。