Python-将2个文件中的行与\n

Python-将2个文件中的行与\n,python,python-3.x,Python,Python 3.x,我是Python新手。我有两个文件,其中包含我需要将两个文件逐行合并成一个文件的句子 file_1.txt: feel my cold hands. I love oranges. Mexico has a large surplus of oil. Ink stains don't rub out. file_2.txt: ≥ª ¬˘ º’¿ª ¡ª ∏∏¡Æ∫¡. ∏«¸ ∫Ò«‡±‚∞° ∞≠¿ª ≥Øæ∆∞¨¥Ÿ. ∏flΩ√ƒ⁄ø°¥¬ ¥Ÿ∑Æ¿« ø©∫–¿« ºÆ¿Ø∞°

我是Python新手。我有两个文件,其中包含我需要将两个文件逐行合并成一个文件的句子

file_1.txt: 
feel my cold hands.
I love oranges. 
Mexico has a large surplus of oil.
Ink stains don't rub out.

file_2.txt: 
≥ª ¬˘ º’¿ª ¡ª ∏∏¡Æ∫¡.
∏«¸ ∫Ò«‡±‚∞° ∞≠¿ª ≥Øæ∆∞¨¥Ÿ.
∏flΩ√ƒ⁄ø°¥¬ ¥Ÿ∑Æ¿« ø©∫–¿« ºÆ¿Ø∞° ¿÷¥Ÿ.
¿◊≈© ¿⁄±π¿∫ ¥€æ∆µµ ¡ˆøˆ¡ˆ¡ˆ æ ¥¬¥Ÿ.



FINAL OUTPUT should look like: 

feel my cold hands.
≥ª ¬˘ º’¿ª ¡ª ∏∏¡Æ∫¡.

I love oranges. 
∏«¸ ∫Ò«‡±‚∞° ∞≠¿ª ≥Øæ∆∞¨¥Ÿ.

Mexico has a large surplus of oil.
∏flΩ√ƒ⁄ø°¥¬ ¥Ÿ∑Æ¿« ø©∫–¿« ºÆ¿Ø∞° ¿÷¥Ÿ.

Ink stains don't rub out.
¿◊≈© ¿⁄±π¿∫ ¥€æ∆µµ ¡ˆøˆ¡ˆ¡ˆ æ ¥¬¥Ÿ.
这是我试过的

filenames = ['data/data.txt', 'data/data2.txt']
with open('data/test.txt', 'w') as outfile:
    for fname in filenames:
        with open(fname) as infile:
            for line in infile:
                outfile.write(line)
这里的代码只是一个接一个地连接文件。但是,它不是逐行切割并创建\n。 谢谢

参考资料:


所以技巧是我们想要同时迭代两个文件。为此,我们可以使用
zip
函数,如下所示:

filenames = ['data/data.txt', 'data/data2.txt']
with open('data/test.txt', 'w') as outfile:
    with open(filenames[0]) as f1, open(filenames[1]) as f2:
        for f1_line, f2_line in zip(f1, f2):
            outfile.write(f1_line)
            outfile.write(f2_line)
            outfile.write("\n")  # add blank line between each pair

所以关键是我们要同时迭代两个文件。为此,我们可以使用
zip
函数,如下所示:

filenames = ['data/data.txt', 'data/data2.txt']
with open('data/test.txt', 'w') as outfile:
    with open(filenames[0]) as f1, open(filenames[1]) as f2:
        for f1_line, f2_line in zip(f1, f2):
            outfile.write(f1_line)
            outfile.write(f2_line)
            outfile.write("\n")  # add blank line between each pair
您可以使用以下选项:

with open('data/data.txt', 'r') as f1, open('data/data2.txt', 'r') as f2:
    for line1, line2 in zip(f1, f2):
        # do something
您可以使用以下选项:

with open('data/data.txt', 'r') as f1, open('data/data2.txt', 'r') as f2:
    for line1, line2 in zip(f1, f2):
        # do something
试试这个:

filenames = ['data/data.txt', 'data/data2.txt']
with open('data/test.txt', 'w') as outfile,ExitStack() as stack:
    files = [stack.enter_context(open(fname)) for fname in filenames]
    for lines in zip(*files):
        outfile.writelines(lines)
此方法可以接受任意数量的输入文件。

尝试以下方法:

filenames = ['data/data.txt', 'data/data2.txt']
with open('data/test.txt', 'w') as outfile,ExitStack() as stack:
    files = [stack.enter_context(open(fname)) for fname in filenames]
    for lines in zip(*files):
        outfile.writelines(lines)

这种方法可以接受任意数量的输入文件。

您可以使用上下文管理器:

import contextlib

@contextlib.contextmanager
def aline(outfile, *files):
  final_data = zip(open(files[0]), open(files[1]))
  yield ['\n'.join([a, b]) for a, b in final_data]
  f = open(outfile, 'w')
  for a, b in final_data:
    f.write('\n'.join([a, b])+'\n\n')
  f.close()

with aline('output.txt', *['data/data.txt', 'data/data2.txt']) as f:
  print(f)
输出(int
Output.txt
):


您可以使用上下文管理器:

import contextlib

@contextlib.contextmanager
def aline(outfile, *files):
  final_data = zip(open(files[0]), open(files[1]))
  yield ['\n'.join([a, b]) for a, b in final_data]
  f = open(outfile, 'w')
  for a, b in final_data:
    f.write('\n'.join([a, b])+'\n\n')
  f.close()

with aline('output.txt', *['data/data.txt', 'data/data2.txt']) as f:
  print(f)
输出(int
Output.txt
):


输入文件的数量是否更改?输入文件的数量是否更改?使用
outfile.write('\n')
结尾以100%回答OP的问题。使用
outfile.write('\n')
结尾以100%回答OP的问题。