python按规则合并文件

时间:2017-07-24 22:50:50

标签: python python-2.7 python-3.x

我需要在python中编写脚本,根据以下规则接受并合并2个文件到新文件: 1)从第一个文件中取1个字,然后从第二个文件中取2个字。 2)当我们到达1个文件的末尾时,我需要将其他文件的其余部分复制到合并文件而不做任何更改。

我写了那个脚本,但我只能从每个文件中读取1个单词。 完整的脚本会很好,但我真的很想通过单词来理解我是如何做到的。

这就是我写的:

def exercise3(file1,file2):
    lstFile1=readFile(file1)
    lstFile2=readFile(file2)

    with open("mergedFile", 'w') as outfile:
        merged = [j for i in zip(lstFile1, lstFile2) for j in i]
        for word in merged:
            outfile.write(word)


def readFile(filename):
    lines = []
    with open(filename) as file:
        for line in file:
            line = line.strip()
            for word in line.split():
                lines.append(word)
    return lines

1 个答案:

答案 0 :(得分:0)

你当前的问题是zip替换你给它的迭代中的项目:简而言之,它是1:1的映射,你需要1:2。试试这个:

lstFile2a = listfile2[0::2]
lstFile2b = listfile2[1::2]
... zip(lstfile1, listfile2a, lstfile2b)

这样效率有点低,但完成工作。

另一种方法是在使用lstFile1压缩它之前在lstFile2中压缩对(2元组)。第三种方法是完全忘记压缩,并运行自己的索引:

for i in min(len(lstFile1), len(lstFile2)//2):
    outfile.write(lstFile1[i])
    outfile.write(lstFile2[2*i])
    outfile.write(lstFile2[2*i+1])

但是,这会让你留下要处理的较长文件的剩余部分。

这些并不是特别优雅,但它们应该让你感动。