如何遍历文件夹以在Python中查找特定文件?

时间:2016-04-26 21:46:45

标签: python

我正在尝试遍历文件夹以对特定文件执行分析。

我们说我有3个名为S1S2S3的文件夹。每个文件夹都包含一个名为hi.csv的同名文件。一旦我让脚本成功遍历每个文件夹并找到该文件,我将分析CSV并在每个文件夹中创建一个新的CSV文件。

代替分析代码,我只是尝试在第一个实例中打印文件。理想情况下,我会在每个子文件夹hi.txtS1S2下看到名为S3的文件名。

这是我到目前为止所尝试的内容,但它不起作用:

fn = 'hi.txt'
indir = '/Users/sheena/Desktop/Test'
for root, dirs, filenames in os.walk(indir):
    for d in dirs:
        if os.path.isfile(fn):
            print(f)

3 个答案:

答案 0 :(得分:1)

如果您要检查某个文件名,则应在filenames中进行检查,如果成功,则当前文件夹为rootdirs没有输入图片。

fn = 'hi.txt'
indir = '/Users/sheena/Desktop/Test'
for root, _, filenames in os.walk(indir):
    if fn in filenames:
        print("Got: {}/{}".format(root, fn))

看看它是否按您想要的方式工作。如果没有,请评论。

答案 1 :(得分:1)

查看错误的简单方法是添加一行

print(root, dirs, filenames)

紧接着第一个' for'环。你得到的输出是

/tmp ['s3', 's2', 's1', ...] ['test.py', 'GRADUATE BALLOT APPLICATION FORM 2016-17.doc', 'ankid6955d9721560531274cb8f50ff595a9bd39d66f', '.X0-lock']
/tmp/s3 [] ['hi.txt']
/tmp/s2 [] ['hi.txt']
/tmp/s1 [] ['hi.txt']
/tmp/hsperfdata_joshua [] ['391']
/tmp/cujc ['foo'] []
/tmp/yaourt-tmp-joshua [] []
/tmp/.Test-unix [] []
/tmp/.font-unix [] []
/tmp/.XIM-unix [] []

所以

  1. " os.walk"它可能没有做你期望它做的事情,它遍历子目录的所有子目录和子目录(但这不是你的代码的问题,可能只是更智能/更快这样做的方式)
  2. 所有文件都在"文件名"列表 - 所以你要重复错误的列表! ' hi.txt'是在'文件名'列出' root'是' blah / S1',' blah / S2',或' blah / S3'。

答案 2 :(得分:0)

if os.path.isfile(os.path.join(d,fn)):

我想......也许......这可能不是找到匹配

的文件的最佳方法
for root, dirs, filenames in os.walk(indir):
    for fname in filenames:
        if fname == fn:
           print os.path.join(root,fname)

可能好一点