我有很多要合并为一个文件的html文件。 文件路径是/ Desktop / Username / My_files /。此文件夹包含1300个不同的文件夹,并且所有这些文件夹都具有message.html文件。
我不想用一个一个地复制它们,而是想使用Python解决这个问题。 如果message.html在文件夹中,但是无法读取基础文件夹结构的内容,我的代码将起作用。代码的粗体部分需要更改,但是如何最容易地纠正呢?
/settings
答案 0 :(得分:0)
如果所有文件都只是一个文件夹级别的深度,则您只是放错了占位符。对未知文件夹使用占位符,而不是文件名:
# match "message.html" in all direct subfolders of "/Home/Username/Desktop/My_files/"
path = '/Home/Username/Desktop/My_files/*/message.html'
请注意,如果文件名也不是常量,glob
也将占用几个占位符:
# match any html file in all direct subfolders of "/Home/Username/Desktop/My_files/"
path = '/Home/Username/Desktop/My_files/*/*.html'
如果不仅需要直接子文件夹,那么事情会更加棘手。从Python3.5开始,glob.glob
supports a recursive placeholder:
如果递归为true,则模式“
**
”将匹配任何文件以及零个或多个目录和子目录。
在您的情况下,看起来像这样:
# match "message.html" in all subfolders of "/Home/Username/Desktop/My_files/"
path = '/Home/Username/Desktop/My_files/**/message.html'
files = glob.glob(path, recursive=True)
在较旧的Python版本上,您应该自己遍历目录。 os.walk
function允许您递归检查子目录中的所有文件。
以下内容提供了基本目录中具有固定名称的每个文件的完整路径:
def find_files(base_path, file_name):
"""Yield all paths to any file named ``file_name`` in a subdirectory of ``base_path``"""
# recursively walk through all subdirectories
for dirpath, dirnames, filenames in os.walk(base_path):
# test if the file name occurs in the current subdirectory
if file_name in filenames:
yield os.path.join(base_path, dirpath, file_name)
您可以使用它代替全局结果:
files = find_files('/Home/Username/Desktop/My_files/', 'message.html')
for file in files:
...