Python os.walk/fnmatch.filter 在文件的当前目录中找不到文件

标签 python io os.walk

我正在尝试递归地遍历目录并查找与特定模式匹配的文件。我的代码的相关片段是:

import sys, os, xlrd, fnmatch

for root, dirnames, filenames in os.walk('/myfilepath/'):

    for dir in dirnames:
        os.chdir(os.path.join(root, dir))

        for filename in fnmatch.filter(filenames, 'filepattern*'):
            print os.path.abspath(filename)
            print os.getcwd()
            print filename

            wb = xlrd.open_workbook(filename)

我的打印行表明os.getcwd()等于文件名的目录,所以对我来说似乎应该找到该文件,但是IOError: [Errno 2]当第一个模式匹配时,wb = xlrd.open_workbook(filename) 不会抛出这样的文件或目录

最佳答案

os.walk返回的dirnames并不代表filenames存在的目录。相反,root 表示filenames 所在的目录。对于您的应用程序,您可以有效地忽略 directories 返回。

尝试这样的事情:

import os
import fnmatch

for root, _, filenames in os.walk('/tmp'):
    print root, filenames
    for filename in fnmatch.filter(filenames, '*.py'):
        filename = os.path.join(root, filename)

        # `filename` now unambiguously refers to a file that
        # exists. Open it, delete it, xlrd.open it, whatever.
        # For example:
        if os.access(filename, os.R_OK):
            print "%s can be accessed"  % filename
        else:
            print "%s cannot be accessed"  % filename

旁白:在 os.walk() 迭代中调用 os.chdir() 可能不安全。如果 os.walk() 的参数是相对的,则尤其如此。

关于Python os.walk/fnmatch.filter 在文件的当前目录中找不到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32746367/

相关文章:

python - Scipy.Stats.exponweib 的子类不调用 __init__ 或其他函数

python - 如何为pytest设置current_user?

C++程序——输入文本流

go - 使用重定向到文件启动分离命令

python - 使用 os.walk 定位目录

python - 更改字符串数据框中的 nan

python - 将 CSV 的每一行存储为单独的列表/字典

java - Apache OpenNLP POSModel(URL) 构造函数

python - 如何获取包含受 Python 深度限制的特定文件的所有目录?

python - 无法打开资源: OS Error