我有一个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"
有没有其他简单的方法可以做到这一点?
答案 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
(慢得多)......如果你想因为某种原因想要留在标准库中,你可以使用它。
在此处获取pox
:https://github.com/uqfoundation