【问题标题】:Python looping over folders and its subfolders to read CSV is getting file names but on read_csv it is returning file not foundPython遍历文件夹及其子文件夹以读取CSV正在获取文件名,但在read_csv上它返回的文件未找到
【发布时间】:2020-11-20 16:17:55
【问题描述】:

我正在尝试遍历文件夹和子文件夹以访问和读取 CSV 文件,然后再将它们转换为 JSON。这是我正在处理的代码:

cursor = conn.cursor()
try:
    # Specify the folder containing needed files
    folderPath = 'C:\\Users\\myUser\\Desktop\\toUpload' # Or using input()
    fwdPath = 'C:/Users/myUser/Desktop/toUpload'
    for countries in os.listdir(folderPath):
        for sectors in os.listdir(folderPath+'\\'+countries):
            for file in os.listdir(folderPath+'\\'+countries+'\\'+sectors):
                data = pd.DataFrame()
                filename, _ext = os.path.splitext(os.path.basename(folderPath+'\\'+countries+'\\'+file))
                print(file + ' ' + filename+ ' ' + sectors + ' ' + countries)
                data = pd.read_csv(file)
    # cursor.execute('SELECT * FROM SECTORS')
    # print(list(cursor))
finally:
    cursor.close()
conn.close()

下面的打印行将返回文件,其文件名不带扩展名,然后是扇区和国家文件夹名称:

print(file + ' ' + filename+ ' ' + sectors + ' ' + countries)

myfile.csv myfile WASHSector CTRYIrq

现在读取 CSV 会花费很多时间,最后 O 会收到以下错误:

[Errno 2] 文件 myfile.csv 不存在

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你需要给pd.read_csv文件的完整路径,所以改成:

    data = pd.read_csv(folderPath+'\\'+countries+'\\'+sectors + '\\' +file)
    

    【讨论】:

      【解决方案2】:

      在读取 csv 文件之前,您应该编写文件的完整路径,否则,pandas 将无法读取该文件。

      import os
      
      # ...
      path = os.path.join(folderPath, countries, sectors, file)
      data = pd.read_csv(path)
      

      我建议您使用os.walk 方法,而不是使用三个嵌套的for 循环。它会自动通过目录递归

      >>> folderPath = 'C:\\Users\\myUser\\Desktop\\toUpload'
      >>> for root, _, files in os.walk(folderPath):
      >>> ...   for f in files:
      >>> ...     pd.read_csv(os.path.join(root, f))
      

      【讨论】:

      • 抱歉,这是一个名为 ai 的本地目录。我现在编辑答案
      • 我这样做的主要原因是因为我需要每个子文件夹的名称稍后添加到文件中
      • 所以我需要知道这个文件在 IRQ 文件夹和 WASH 子文件夹中才能将它们添加到数据库中。也可以os.walk() 帮忙。
      • 好吧,您在根变量中有子目录名称。这只是提高性能的建议,如果您不喜欢使用它,请不要使用它:)
      • 我对提高性能很感兴趣,因为有成百上千的文件夹要经过。
      猜你喜欢
      • 1970-01-01
      • 2014-10-06
      • 2020-05-06
      • 1970-01-01
      • 2016-06-03
      • 2011-03-12
      • 1970-01-01
      • 2017-02-08
      相关资源
      最近更新 更多