我有一个文件,可能在每个用户的机器上不同的位置。是否有一种方法来实现对文件的搜索?我可以传递文件名和目录树搜索的方式吗?
这将找到第一个匹配:
import os
def find(name, path):
for root, dirs, files in os.walk(path):
if name in files:
return os.path.join(root, name)
这个会找到所有匹配的:
def find_all(name, path):
result = []
for root, dirs, files in os.walk(path):
if name in files:
result.append(os.path.join(root, name))
return result
这将符合一个模式:
import os, fnmatch
def find(pattern, path):
result = []
for root, dirs, files in os.walk(path):
for name in files:
if fnmatch.fnmatch(name, pattern):
result.append(os.path.join(root, name))
return result
find('*.txt', '/path/to/dir')
我用了一个版本os.walk
在一个更大的目录上,大约有3.5秒的时间。我尝试了两种随机的解决方案,但没有什么大的改进,然后我做了:
paths = [line[2:] for line in subprocess.check_output("find . -iname '*.txt'", shell=True).splitlines()]
我只有0.25秒的时间。
因此,我相信完全有可能以一种独立于平台的方式对整个搜索进行优化,但这就是我停止研究的地方。