【问题标题】:Reading multiple txt files from multiple folders从多个文件夹中读取多个 txt 文件
【发布时间】:2021-12-28 21:39:06
【问题描述】:

我有 20 个文件夹,每个文件夹包含 50 个 txt 文件,我需要阅读所有文件夹以比较每个文件夹的字数。我知道如何读取一个文件夹中的多个文件,但是速度很慢,有没有更有效的方法,而不是像下面这样一个一个地读取文件夹?

import re
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

import os
import glob

1. folder1

folder_path = '/home/runner/Final-Project/folder1'

for filename in glob.glob(os.path.join(folder_path, '*.txt')):
  with open(filename, 'r') as f:
    text = f.read()
    print (filename)
    print (len(text))

2. folder2

folder_path = '/home/runner/Final-Project/folder2'

for filename in glob.glob(os.path.join(folder_path, '*.txt')):
  with open(filename, 'r') as f:
    text = f.read()
    print (filename)
    print (len(text))

【问题讨论】:

  • 所有文件夹是否都在同一个根文件夹下,例如/home/runner/Final-Project?
  • @MattDmo 是的,所有文件夹都在同一个根目录下!
  • @麦宝子,你到底想要什么?您想读取所有文件而不必写入每个目录的路径?
  • 不,真的没有办法。
  • @VictorSaraivaRocha,在这一步中,我想分别将每个文件夹中txt文件的所有字数相加,看看哪个文件夹包含最长的文本。我需要在最后绘制它们,但是文件夹太多了

标签: python file-io operating-system


【解决方案1】:

您可以像您一样使用glob 执行类似的操作,但使用目录名称。

folder_path = '/home/runner/Final-Project'

for filename in glob.glob(os.path.join(folder_path,'*','*.txt')):
    # process your files

os.path.join() 中的第一个 '*' 代表任意名称的目录。所以像这样调用glob.glob() 将通过并在folder_path 内的任何目录中找到任何文本文件

【讨论】:

    【解决方案2】:

    下面的函数将在不使用 glob 的情况下返回所有目录和子目录中的文件列表。从文件列表中读取并打开读取。

    def list_of_files(dirName):
        files_list = os.listdir(dirName)
        all_files = list()
        for entry in files_list:
            # Create full path
            full_path = os.path.join(dirName, entry)
            if os.path.isdir(full_path):
                all_files = all_files + list_of_files(full_path)
            else:
                all_files.append(full_path)
    
        return all_files
    
    print(list_of_files(<Dir Path>))  # <Dir Path>  ==> your directory path
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-31
      • 2017-04-21
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多