从python列表中写入数据?
我有三个列表A、B和C。我想将列表的内容写入文件,如下所示: A[1] B[1] C[1] A[2] B[2] C[2] . .从python列表中写入数据?,python,Python,我有三个列表A、B和C。我想将列表的内容写入文件,如下所示: A[1] B[1] C[1] A[2] B[2] C[2] . . .看看如何使用zip。使用zip可以获得元组列表,元组是每个列表的第i项。作为奖励,元组列表被截断为三个元组中最短的一个: myComboList = zip(A, B, C) 然后你就可以按照你喜欢的顺序写东西,而不用担心其中一个列表可能比其他列表短/长。我假设所有列表的长度都是一样的 assert len(A) == len(B) == len(C) for a
.看看如何使用
zip
。使用zip
可以获得元组列表,元组是每个列表的第i项。作为奖励,元组列表被截断为三个元组中最短的一个:
myComboList = zip(A, B, C)
然后你就可以按照你喜欢的顺序写东西,而不用担心其中一个列表可能比其他列表短/长。我假设所有列表的长度都是一样的
assert len(A) == len(B) == len(C)
for a, b, c in zip(A, B, C):
print a, b, c # replace with file write
如果您的列表很长,那么itertools.izip()可能是您的朋友。File object.writelines()可以使用该列表,也可以在两者之间插入一个yield构造来进行格式化
def format(seq):
for l in seq:
yield "%s %s %s" % l
f.writelines(format(itertools.izip(A, B, C)))
从Bittrance的
itertools.izip()
的思想来看
加上内置函数format()
已经存在:
import itertools
A = ['arez','hgjkhg','jhdfg','uhireug']
B = ['aaa','bbb','cccc','ddd']
C = ['XXXX','YYYY','ZZZZ','WWWWW']
with open('zorgl.txt','w') as f:
f.writelines("[{0}] [{1}] [{2}]\n".format(*tu)
for tu in itertools.izip(A, B, C))
结果在文件中
[arez] [aaa] [XXXX]
[hgjkhg] [bbb] [YYYY]
[jhdfg] [cccc] [ZZZZ]
[uhireug] [ddd] [WWWWW]
一个启示发生在我身上:
我从来没有意识到writelines()
写的是一个字符串序列,它可以是一个iterable,而write()
只写一个字符串
直到现在,我一直在做这样的事情:
f.write('\n'.join(sequentia))
写入文件
但是'\n'.join(sequentia)
是在一次写入之前创建的对象。我相信
相比较而言,writelines()
可以接收一个iterable,然后可以一次写入一行。这允许在一个文件中逐步写入大量数据,而在同一时间仅在一个块中写入数据总量可能会更困难
我说得对吗
writelines()
唯一的一个小缺陷是它按原样写入字符串,而不添加换行符
因此
writelines(sequentz)
的写入方式与write(''.join(sequentz))
的写入方式相同。只有write('\n.join(sequentz))
在元素之间添加换行符您确定这些列表将具有相同数量的元素吗?您可能想序列化对象或将对象另存为CSV?我同意@Daniel的观点,一些代码片段会有所帮助。我还认为@wheaties回答了这个问题。它可以工作,但现在我如何在没有['u]的情况下打印它,因为在一个列表中,([u'添加在元素之前。我可以在这个zip列表上使用for循环吗?在有内置函数的情况下创建特定函数format()
。但是+1可以关联writelines()
和itertools.izip()
Ah,format()被后传到了2.6;我没有注意到。下面的eyquem有更好的解决方案。