Python 在文件夹结构中爬行
我有一些代码可以查看单个文件夹并提取文件。 但是现在文件夹结构已经改变,我需要在文件夹中搜索匹配的文件 旧代码是什么样子的Python 在文件夹结构中爬行,python,os.walk,Python,Os.walk,我有一些代码可以查看单个文件夹并提取文件。 但是现在文件夹结构已经改变,我需要在文件夹中搜索匹配的文件 旧代码是什么样子的 GSB_FOLDER = r'D:\Games\Gratuitous Space Battles Beta' def get_module_data(): module_folder = os.path.join(GSB_FOLDER, 'data', 'modules') filenames = [os.path.join(module_folder
GSB_FOLDER = r'D:\Games\Gratuitous Space Battles Beta'
def get_module_data():
module_folder = os.path.join(GSB_FOLDER, 'data', 'modules')
filenames = [os.path.join(module_folder, f) for f in
os.listdir(module_folder)]
data = [parse_file(f) for f in filenames]
return data
但现在文件夹结构已更改为如下所示
- GSB_文件夹\数据\模块
- \folder1\数据\模块
- \folder2\数据\模块
- \folder3\数据\模块
我听说过os.walk,但我只是在学习Python。。。因此,任何帮助都不会有太大变化,只要调用
os.walk
,它就会递归地遍历目录并返回文件,例如
for root, dirs, files in os.walk('/tmp'):
if os.path.basename(root) != 'modules':
continue
data = [parse_file(os.path.join(root,f)) for f in files]
在这里,我只检查名为“modules”的文件夹中的文件。您可以更改该检查以执行其他操作,例如,在某个地方有module
根目录的路径。find(“/modules”)>=0
您可以使用操作系统。walk
如@Anurag有详细说明,或者您可以尝试我的小程序库:
walk是一种很好的简单方法,它可以让您获得所传递目录中所有内容的目录结构 在您的示例中,您可以执行以下操作:
for dirpath, dirnames, filenames in os.walk("...GSB_FOLDER"):
#whatever you want to do with these folders
if "/data/modules/" in dirpath:
print dirpath, dirnames, filenames
试一试,它的工作原理应该是不言自明的…创建了一个函数,该函数用于在目录结构中爬行,并返回与模式匹配的文件和/或路径
import os
import re
import sys
def directory_spider(input_dir, path_pattern="", file_pattern="", maxResults=500):
file_paths = []
if not os.path.exists(input_dir):
raise FileNotFoundError("Could not find path: %s"%(input_dir))
for dirpath, dirnames, filenames in os.walk(input_dir):
if re.search(path_pattern, dirpath):
file_list = [item for item in filenames if re.search(file_pattern,item)]
file_path_list = [os.path.join(dirpath, item) for item in file_list]
file_paths += file_path_list
if len(file_paths) > maxResults:
break
return file_paths[0:maxResults]
示例用法:
- 目录_spider('/path/to/find')-->查找路径中的前500个文件(如果存在)
- 目录_spider('/path/to/find',path_pattern=“”,file_pattern=“.py$”,maxResults=10)
import os
import re
import sys
def directory_spider(input_dir, path_pattern="", file_pattern="", maxResults=500):
file_paths = []
if not os.path.exists(input_dir):
raise FileNotFoundError("Could not find path: %s"%(input_dir))
for dirpath, dirnames, filenames in os.walk(input_dir):
if re.search(path_pattern, dirpath):
file_list = [item for item in filenames if re.search(file_pattern,item)]
file_path_list = [os.path.join(dirpath, item) for item in file_list]
file_paths += file_path_list
if len(file_paths) > maxResults:
break
return file_paths[0:maxResults]