从python列表中写入数据?

时间:2011-03-04 19:05:44

标签: python

我有三个列表A,B和C.我想将列表的内容写入文件,如下所示: A [1] B [1] C [1]

A [2] B [2] C [2] 。 。

4 个答案:

答案 0 :(得分:3)

看一下使用zip。使用zip,您将获得元组列表,元组是每个列表的第i项。作为奖励,元组列表被截断为三个中最短的列表:

myComboList = zip(A, B, C)

然后你总是可以按照你喜欢的顺序写东西,而不用担心一个列表可能比其他列表更短/更长。

答案 1 :(得分:2)

我假设所有列表的长度都相同,

assert len(A) == len(B) == len(C)
for a, b, c in zip(A, B, C):
    print a, b, c    # replace with file write

答案 2 :(得分:1)

如果您的列表很长,itertools.izip()可能会成为您的朋友。文件对象.writelines()可以使用列表,也可以在两者之间插入yield构造来进行格式化。

def format(seq):
  for l in seq:
    yield "%s %s %s" % l
f.writelines(format(itertools.izip(A, B, C)))

答案 3 :(得分:1)

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()写了一串字符串,可以是可迭代的,而write()只写一个字符串

直到现在我才做这样的事情:

f.write('\n'.join(sequentia))

写入文件。

但是'\n'.join(sequentia)是在一次写入之前创建的对象。我相信。

相比之下,writelines()可以接收迭代,然后一行一行地完成行的写入。这允许在文件中逐步写入大量数据,而一次只能在一个块中写入总数据量。

我是对的吗?

writelines()唯一的缺点就是它会按原样写出字符串,而不添加换行符。

因此writelines(sequentz)write(''.join(sequentz))的写法相同。只有write('\n'.join(sequentz))在元素之间添加换行符