Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python按规则合并文件_Python_Python 2.7_Python 3.x - Fatal编程技术网

python按规则合并文件

python按规则合并文件,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,我需要用python编写脚本,根据以下规则接受2个文件并将其合并到一个新文件中: 1) 从第一个文件中取出一个单词,然后从第二个文件中取出两个单词。 2) 当我们到达一个文件的末尾时,我需要将另一个文件的其余部分复制到合并文件中而不做任何更改 我写了那个脚本,但我设法从每个文件中只读取一个单词。 完整的脚本会很好,但我真的很想用文字来理解我自己是如何做到这一点的。 这是我写的: def exercise3(file1,file2): lstFile1=readFile(file1)

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

我写了那个脚本,但我设法从每个文件中只读取一个单词。 完整的脚本会很好,但我真的很想用文字来理解我自己是如何做到这一点的。

这是我写的:

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

您眼前的问题是
zip
替换您提供的iterables中的项目:简而言之,这是一个1:1映射,您需要1:2。试试这个:

lstFile2a = listfile2[0::2]
lstFile2b = listfile2[1::2]
... zip(lstfile1, listfile2a, lstfile2b)
这有点低效,但可以完成工作

另一种方法是先压缩lstFile2中的成对(2元组),然后再使用lstFile1压缩。第三种方法是完全忘记压缩,运行自己的索引:

for i in min(len(lstFile1), len(lstFile2)//2):
    outfile.write(lstFile1[i])
    outfile.write(lstFile2[2*i])
    outfile.write(lstFile2[2*i+1])
但是,这会使您需要处理较长文件的剩余部分

这些不是特别优雅,但它们会让你动起来