使用Python的文本文件生成器

时间:2014-05-26 16:18:43

标签: python file scripting-language

我有3个文件 -
文件1:

A
B
C

file2的:

10,20,30,40
40,20,50,60
60,20,80,90

file3的:

20
30
40

如何合并文件以生成以下格式的单个文件:

A  10,20,30,40  20
B  40,20,50,60  30
C  60,20,80,90  40

每个列都以' \ t'分隔,即选项卡而非空格。
我对Python来说真的很陌生而且我不确定如何实现这一点。我在网上看到了各种例子,他们只是简单地连接文件而不保留模式(列)。
如何通过使用单个制表符分隔列来保留模式? 任何相关的代码都会非常有用。感谢。

2 个答案:

答案 0 :(得分:5)

对于.join()zip()来说,这是一份好工作:

假设f1f2f3是输入文件的句柄,而output是输出的句柄,您可以

for items in zip(*(f1, f2, f3)):
    output.write("\t".join(item.strip() for item in items) + "\n")

zip()将所有相应的项目(所有第一行,第二行等)拉到一起,将它们表示为元组。

join()使用\t作为分隔符将它们连接成一个字符串。

由于我们已经从文件中读取了这些行,因此它们大多以\n结尾,因此我们需要在加入字符串之前删除它们。

答案 1 :(得分:2)

虽然在Python中很容易做到这一点,但也有一个标准的unix工具可以做到这一点。只做paste file1 file2 file3 > singlefile

Python中的相同工作可能是:

import itertools
def paste(outfile, separator="\t", *infiles):
    for line in itertools.izip_longest(*infiles, fillvalue=""):
        outfile.write(separator.join(column.rstrip("\n") for column in line)+"\n")
if __name__=="__main__":
    import sys
    paste(sys.stdout, "\t", *map(open,sys.argv[1:]))