如何在Python中遍历文件夹以查找特定文件?
我正在尝试遍历文件夹以对特定文件执行分析 假设我有3个文件夹,分别名为如何在Python中遍历文件夹以查找特定文件?,python,Python,我正在尝试遍历文件夹以对特定文件执行分析 假设我有3个文件夹,分别名为S1、S2和S3。每个文件夹都包含一个同名文件,名为hi.csv。一旦脚本成功地遍历每个文件夹并找到该文件,我将让它分析CSV并在每个文件夹中创建一个新的CSV文件 作为分析代码的替代,我刚刚尝试在第一个实例中打印文件。理想情况下,我会在每个子文件夹下看到名为hi.txt的文件名、S1、S2和S3 以下是我迄今为止尝试过的方法,但它不起作用: fn = 'hi.txt' indir = '/Users/sheena/Deskt
S1
、S2
和S3
。每个文件夹都包含一个同名文件,名为hi.csv
。一旦脚本成功地遍历每个文件夹并找到该文件,我将让它分析CSV并在每个文件夹中创建一个新的CSV文件
作为分析代码的替代,我刚刚尝试在第一个实例中打印文件。理想情况下,我会在每个子文件夹下看到名为hi.txt
的文件名、S1
、S2
和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)
我想。。。大概这可能不是找到匹配文件的最佳方法
for root, dirs, filenames in os.walk(indir):
for fname in filenames:
if fname == fn:
print os.path.join(root,fname)
可能会好一点
我想。。。大概这可能不是找到匹配文件的最佳方法
for root, dirs, filenames in os.walk(indir):
for fname in filenames:
if fname == fn:
print os.path.join(root,fname)
可能更好一些如果您试图检查某个文件名,您应该在
文件名
中检查它,如果成功,则当前文件夹为root
<代码>目录不进入图片
fn = 'hi.txt'
indir = '/Users/sheena/Desktop/Test'
for root, _, filenames in os.walk(indir):
if fn in filenames:
print("Got: {}/{}".format(root, fn))
看看它是否按你想要的方式工作。如果没有,请发表评论。如果您试图检查某个文件名,您应该在
文件名中检查它,如果成功,则当前文件夹为root
<代码>目录
不进入图片
fn = 'hi.txt'
indir = '/Users/sheena/Desktop/Test'
for root, _, filenames in os.walk(indir):
if fn in filenames:
print("Got: {}/{}".format(root, fn))
看看它是否按你想要的方式工作。如果没有,请发表评论。一种查看问题的简单方法是添加一行
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 [] []
所以
要想知道哪里出了问题,一个简单的方法是添加一行
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 [] []
所以
关于“不起作用”的任何进展?你需要提供更多信息,说明问题的实质是什么,你尝试了什么,失败了什么。否则它很容易被关闭。关于“不起作用”的任何进展?你需要提供更多信息,说明问题的实质是什么,你尝试了什么,失败了什么。否则很容易被关闭。谢谢大家的评论。有了你的建议,我可以得到我想要的文件,现在我正试图分析这些文件,然后将一个文件输出到每个文件夹中。我尝试了:fn='diff.nii'indir='/Users/sheena/Desktop/DTI'作为根目录,在os.walk(indir)中使用文件名:如果文件名中使用fn:flt=fsl.flir(bin=640,cost\u func='mutualinfo')flt.inputs.in文件='os.path.join(root,fn)'flt.inputs.output\u type=“NIFTI\u GZ”我收到一个错误,粘贴在下面。如有任何建议,我将不胜感激!非常感谢。TraitError:InputSpec实例的“in_file”特征必须是现有文件名,但指定了“os.path.join(root,fn)”值。不要在
os.path.join…
周围加引号,谢谢大家的评论。有了你的建议,我可以得到我想要的文件,现在我正试图分析这些文件,然后将一个文件输出到每个文件夹中。我尝试了:fn='diff.nii'indir='/Users/sheena/Desktop/DTI'作为根目录,在os.walk(indir)中使用文件名:如果文件名中使用fn:flt=fsl.flir(bin=640,cost\u func='mutualinfo')flt.inputs.in文件='os.path.join(root,fn)'flt.inputs.output\u type=“NIFTI\u GZ”我收到一个错误,粘贴在下面。如有任何建议,我将不胜感激!非常感谢。TraitError:InputSpec实例的“in_file”特征必须是现有文件名,但指定了“os.path.join(root,fn)”值。不要在os.path.join…
doh很好的答案。。。OP应该接受这个+1,我不确定迭代文件名的想法directly@JoranBeasley除了那个多余的步骤,你的代码是正确的。但问题是,我已经回答了三次以上类似的问题,出于某种原因,许多人对root
和dirnames
感到困惑,基本上是关于os.walk
返回的内容。。。OP应该接受这个+1,我不确定迭代文件名的想法directly@JoranBeasley除了那个多余的步骤,你的代码是正确的。但问题是,我已经回答了三次以上类似的问题,出于某种原因,许多人对root
和dirnames
感到困惑,基本上是对os.walk
返回的内容感到困惑。