【问题标题】:How to concatenate a large number of text files in python如何在python中连接大量文本文件
【发布时间】:2021-05-31 20:33:30
【问题描述】:

我有 367 个文本文件要连接成一个长文本文件。我在想我可以这样做:

filenames = ["file1.txt","file2.txt","file3.txt"...]
with open("output_file.txt","w") as outfile:
    for filename in filenames:
        with open(filename) as infile:
            contents = infile.read()
            outfile.write(contents)

但是,这需要我写出每个文本文件名,这将非常繁琐。有没有更简单的方法来使用 Python 连接大量文本文件?谢谢!

【问题讨论】:

  • 您要么输入它们,要么生成它们。此外,您的 write() 可能不是您想要的。也许read() 也是。用测试文件试过了吗?
  • 所有文件名都有某种模式吗?您可以使用glob.glob() 来查找与某个模式匹配的所有文件名。
  • 如果它们在一个文件夹中,那么您可以遍历该文件夹。或者,如果有任何关于您要选择哪些文件的逻辑。但是,如果它们只是在计算机周围随机打乱并选择,那么是的,您必须手动将它们写出来。

标签: python concatenation


【解决方案1】:

使用glob.glob 构建列表文件,使用shutil.copyfileobj 获得更高效的副本。

import shutil
import glob

filenames = glob.glob("*.txt")  # or "file*.txt"
with open("output_file.txt", "wb") as outfile:
    for filename in filenames:
        with open(filename, "rb") as infile:
            shutil.copyfileobj(infile, outfile)

【讨论】:

    【解决方案2】:

    假设这些文件都有一个 filename-count-.extension 格式的计数器 (1-367),我们可以使用列表推导生成 367 个文件。

    filenames = [f'file{i}.txt' for i in range(1,368)]
    with open("output_file.txt","w") as outfile:
        for filename in filenames:
            with open(filename) as infile:
                contents = infile.read()
                outfile.write(contents)
    

    您可以使用的另一个选项是os.listdir

    import os
    for i in os.listdir('files'):
        print(i)
    

    输出

    text1.txt
    text2.txt
    

    【讨论】:

      猜你喜欢
      • 2012-11-16
      • 2013-09-12
      • 1970-01-01
      • 2011-10-19
      • 2021-06-15
      • 2023-03-03
      • 2010-11-03
      • 2011-07-17
      • 1970-01-01
      相关资源
      最近更新 更多