查找未知目录中文件的路径

时间:2014-06-12 12:31:59

标签: python

我有一个python文件来打印另一个文件的完整路径,该文件可以位于其他一些目录中。我的文件夹结构如下:

D:\Main\Script\Myscript.py
D:\Main\Target\A\cow.txt
D:\Main\Target\B\dog.txt,p1.txt
D:\Main\Target\c\cat.txt
D:\Main\Target\D\Q1.txt

当我提供文件名时,我想打印该文件的完整路径。例如,如果我给" Q1.txt"它应该打印D:\Main\Target\D\Q1.txt。我尝试了以下操作,让我的输入文件为Myfile1

Scriptloc=os.path.join(os.path.dirname(__file__))
if (os.path.exist(Scriptloc+".."+os.sep+".."+os.sep+A+Myfile1)):
   print "Filepath is "+Scriptloc+".."+os.sep+".."+os.sep+A+Myfile1
elif (os.path.exist(Scriptloc+".."+os.sep+".."+os.sep+A+Myfile1)):
   print "Filepath is "+Scriptloc+".."+os.sep+".."+os.sep+B+Myfile1
elif (os.path.exist(Scriptloc+".."+os.sep+".."+os.sep+C+Myfile1)):
   print "Filepath is "+Scriptloc+".."+os.sep+".."+os.sep+C+Myfile1
elif (os.path.exist(Scriptloc+".."+os.sep+".."+os.sep+D+Myfile1)):
   print "Filepath is "+Scriptloc+".."+os.sep+".."+os.sep+C+Myfile1
else:
   print "File not found"

有没有其他简单的方法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以使用os.walk,例如:

def find_file(basedir, filename):
    for dirname, dirs, files in os.walk(basedir):
        if filename in files:
            yield os.path.join(dirname, filename)

for found in find_file(basedir, 'Q1.txt'):
    print found

这样您就不必对文件夹结构进行硬编码。

答案 1 :(得分:1)

您可以使用pox,它是为了导航目录并使用文件系统操作而构建的

>>> from pox.shutils import find
>>> find('Q1.txt')
['/Users/mmckerns/Main/Target/D/Q1.txt']

以上内容可以从任何目录运行,您可以指定要从中开始的目录根目录。它将找到所有文件名Q1.txt,并返回其完整路径。有搜索目录,忽略软链接和各种其他东西的选项。搜索是一种快速搜索,非常类似于unix的find功能。失败,pox.shutils.find将故障转移到python的os.walk(慢得多)......如果你想因为某种原因想要留在标准库中,你可以使用它。

在此处获取poxhttps://github.com/uqfoundation