好的,这是我的问题。我在工作时使用目录中的两个目录和所有子文件夹。我想编写一个程序,提示我输入文件名,在给出文件名后,它会搜索这两个目录以及这些目录中的所有子文件夹,查找名称匹配的文件。是否有捷径可寻。任何和所有的帮助将不胜感激。我想在python 3中这样做 (注意:这是我的第一个真正的项目,老实说我不知道从哪里开始。)
答案 0 :(得分:2)
这是一个带递归辅助函数的函数,它返回文件夹中的所有文件(以字典形式:{file_name: file_path, ...}
。
import os, os.path
def getFiles(path):
'''Gets all of the files in a directory'''
sub = os.listdir(path)
paths = {}
for p in sub:
print p # just to see where the function has reached; it's optional
pDir = os.path.join(path, p)
if os.path.isdir(pDir):
paths.update(getAllFiles(pDir, paths))
else:
paths[p] = pDir
return paths
def getAllFiles(mainPath, paths = {}):
'''Helper function for getFiles(path)'''
subPaths = os.listdir(mainPath)
for path in subPaths:
pathDir = pDir = os.path.join(mainPath, path)
if os.path.isdir(pathDir):
paths.update(getAllFiles(pathDir, paths))
else:
paths[path] = pathDir
return paths
例如,如果您要查找myfile.txt
,则其中一个字典键:值对将类似于{'myfile.txt': 'C:\Users\Example\Path\myfile.txt', ...}
。
根据文件夹的文件数量,可能会很慢。为了搜索我的sys.path
(其中有10个文件夹,其中一个是Python\Lib
,这是大型的),大约需要9秒。