从python列表中写入数据?

从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

我有三个列表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, 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有更好的解决方案。