我有一些代码可以查看单个文件夹并提取文件。 但现在文件夹结构已经改变,我需要遍历文件夹,寻找匹配的文件。
旧代码的样子
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
但是现在文件夹结构已经改变为像这样
其中folder1,2或3,可以是任何文本字符串
我如何重写上面的代码来做到这一点...... 我被告知os.walk,但我只是在学习Python ......所以任何帮助都要赞赏
答案 0 :(得分:6)
您只需调用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”的文件夹中的文件,您可以更改该检查以执行其他操作,例如模块位于root.find('/modules') >= 0
答案 1 :(得分:0)
您可以{@ 1}}使用@Anurag详细信息,或者您可以尝试我的小型pathfinder
库:
os.walk
答案 2 :(得分:0)
os.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
尝试一下,应该相当自我解释它是如何工作的......
答案 3 :(得分:0)
创建了一个用于一般目的的函数,用于爬行目录结构并返回与模式匹配的文件和/或路径。
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]
示例用法: