【问题标题】:loop through folder in python and open files throws an error遍历python中的文件夹并打开文件会引发错误
【发布时间】:2017-03-08 22:55:25
【问题描述】:

我尝试遍历文件夹并读取文件,但只有第一个文件会打开并正确读取,但第二个文件会打印名称并出现错误“IOError:[Errno 2] No such file or directory:”。我已经尝试了以下

for filename in os.listdir("pathtodir\DataFiles"):
    if filename.endswith(".log"): 
        print(os.path.join("./DataFiles", filename))

        with open(filename) as openfile:    
        for line in openfile:
        ........

【问题讨论】:

  • 文件不在./DataFiles,根据从pathtodir\DataFiles检索列表的代码行。您应该首先弄清楚您在哪里寻找文件,选择正斜杠或反斜杠(但不能同时使用),然后在使用该路径名时保持一致。您必须在获得其名称的同一文件夹中打开文件;您的代码不会这样做,因为它会尝试在没有路径的情况下打开 filename。您正在使用的代码尝试在三个不同的位置访问同一个文件,而且它只在其中一个位置。

标签: python


【解决方案1】:

os.listdir() 只给你文件名,而不是文件路径:

import os

for filename in os.listdir('path/to/dir'):
    if filename.endswith('.log'):
        with open(os.path.join('path/to/dir', filename)) as f:
            content = f.read()

或者,您可以使用glob 模块。 glob.glob() 函数允许您使用模式过滤文件:

import os
import glob

for filepath in glob.glob(os.path.join('path/to/dir', '*.log')):
    with open(filepath) as f:
        content = f.read()

【讨论】:

    【解决方案2】:

    使用os.listdir(...) 只会返回您传递的目录的文件名,而不是文件的完整路径。打开文件时还需要包含相对目录路径。

    basepath = "pathtodir/DataFiles/"
    for filename in os.listdir(basepath):
        if filename.endswith(".log"): 
            print(os.path.join("./DataFiles", filename))
    
            with open(basepath + filename) as openfile:    
                for line in openfile:
                ........
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 2017-02-08
      • 2017-07-18
      • 1970-01-01
      • 2021-08-05
      相关资源
      最近更新 更多