【问题标题】:Loop through files in a folder and create a new merged text file循环浏览文件夹中的文件并创建一个新的合并文本文件
【发布时间】:2021-11-24 07:28:15
【问题描述】:

我正在将多个文本文件合并到一个文本文档中。我能够读取所有文件名并创建一个新的输出文档。

但是,当我输出文档时,我只从一个文件中获取数据,而不是从其他文件中获取数据?总体而言,它应该接近 100 万行 txt,但只获得前 10k

import os

projpath1 = 'PATH1'
projpath2 = 'PATH2'

for root, dirs, files in os.walk(f"{projpath1}", topdown=False):
    for name in files:
        if not name.startswith('.DS_Store'):
            split = name.split("/")
            title = split[0]
            filename = (os.path.join(root, name))
            inputf = os.path.expanduser(f'{projpath1}/{title}')
            updatedf = os.path.expanduser(f'{projpath2}/ENC_merged.txt')

            with open(inputf, "r") as text_file, open(updatedf, 'w') as outfile:
                for info in text_file:
                        for lines in info:
                            outfile.write(lines)

我真的被卡住了,无法弄清楚:/

【问题讨论】:

  • 每次open(updatedf, 'w') 都会覆盖现有文件的内容。您应该改为在a“附加”模式下打开它。见罚款documentation
  • 如果您打算每次都像那样打开文件而不是在循环外打开一次,请查看使用“a”选项打开stackoverflow.com/questions/1466000/…。还要考虑二进制模式,因为将字节视为字节比将 ascii 转换为宽字符并返回要快。
  • @martineau 就是这样......如此简单,我完全忽略了!非常感谢:)

标签: python loops input merge output


【解决方案1】:

您应该先打开创建输出文件,然后在其中保存所有输入文件,这样的东西应该适合您。

import os

projpath1 = 'PATH1'
projpath2 = 'PATH2'
with open(updatedf, 'w') as outfile:
    for root, dirs, files in os.walk(f"{projpath1}", topdown=False):
        for name in files:
            if not name.startswith('.DS_Store'):
                split = name.split("/")
                title = split[0]
                filename = (os.path.join(root, name))
                inputf = os.path.expanduser(f'{projpath1}/{title}')
                updatedf = os.path.expanduser(f'{projpath2}/ENC_merged.txt')
                with open(inputf, "r") as text_file:
                    for info in text_file:
                        for lines in info:
                            outfile.write(lines)

【讨论】:

    【解决方案2】:

    用 bash 怎么办

    ls | xargs cat > merged_file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-28
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多