如何在 Python 中连接文本文件?

新手上路,请多包涵

我有 20 个文件名的列表,例如 ['file1.txt', 'file2.txt', ...] 。我想编写一个 Python 脚本来将这些文件连接成一个新文件。我可以通过 f = open(...) 打开每个文件,通过调用 f.readline() 读取,然后将每一行写入该新文件。对我来说,这似乎不是很“优雅”,尤其是我必须逐行读/写的部分。

在 Python 中是否有更“优雅”的方式来做到这一点?

原文由 JJ Beck 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 711
2 个回答

这应该这样做

对于大文件:

 filenames = ['file1.txt', 'file2.txt', ...]
with open('path/to/output/file', 'w') as outfile:
    for fname in filenames:
        with open(fname) as infile:
            for line in infile:
                outfile.write(line)

对于小文件:

 filenames = ['file1.txt', 'file2.txt', ...]
with open('path/to/output/file', 'w') as outfile:
    for fname in filenames:
        with open(fname) as infile:
            outfile.write(infile.read())

……还有一个我想到的有趣的

 filenames = ['file1.txt', 'file2.txt', ...]
with open('path/to/output/file', 'w') as outfile:
    for line in itertools.chain.from_iterable(itertools.imap(open, filnames)):
        outfile.write(line)

遗憾的是,最后一种方法留下了一些打开的文件描述符,GC 无论如何都应该处理这些描述符。我只是觉得这很有趣

原文由 inspectorG4dget 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 shutil.copyfileobj

它会自动为您逐块读取输入文件,这样效率更高,并且可以读取输入文件,即使某些输入文件太大而无法放入内存,它也能正常工作:

 import shutil

with open('output_file.txt','wb') as wfd:
    for f in ['seg1.txt','seg2.txt','seg3.txt']:
        with open(f,'rb') as fd:
            shutil.copyfileobj(fd, wfd)

原文由 Meow 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题