我有 20 个文件名的列表,例如 ['file1.txt', 'file2.txt', ...]
。我想编写一个 Python 脚本来将这些文件连接成一个新文件。我可以通过 f = open(...)
打开每个文件,通过调用 f.readline()
读取,然后将每一行写入该新文件。对我来说,这似乎不是很“优雅”,尤其是我必须逐行读/写的部分。
在 Python 中是否有更“优雅”的方式来做到这一点?
原文由 JJ Beck 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有 20 个文件名的列表,例如 ['file1.txt', 'file2.txt', ...]
。我想编写一个 Python 脚本来将这些文件连接成一个新文件。我可以通过 f = open(...)
打开每个文件,通过调用 f.readline()
读取,然后将每一行写入该新文件。对我来说,这似乎不是很“优雅”,尤其是我必须逐行读/写的部分。
在 Python 中是否有更“优雅”的方式来做到这一点?
原文由 JJ Beck 发布,翻译遵循 CC BY-SA 4.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 许可协议
4 回答4.5k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
1 回答4.4k 阅读✓ 已解决
1 回答3.9k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
这应该这样做
对于大文件:
对于小文件:
……还有一个我想到的有趣的:
遗憾的是,最后一种方法留下了一些打开的文件描述符,GC 无论如何都应该处理这些描述符。我只是觉得这很有趣