Python:如何保存文件夹和子文件夹中的文件



我有一个主文件夹:e:\PLUS,它包含另外4个子文件夹(A,B,C,D(。现在,我的python代码保存主文件夹(PLUS(中的所有html文件,但不保存其他4个子文件夹中的文件。

任何人都可以更新我的代码一点,以便保存子文件夹中的文件吗?

def check_links_for_all_files(directory_name):
for file in os.listdir(directory_name):
filename = str(file)
print(filename)

if filename.endswith(".html"): #or filename.endswith(".php"):
file_path = os.path.join(directory_name, filename)

check_link(file_path)
else:
continue
if __name__ == '__main__':
check_links_for_all_files("e:\Plus")

您还可以使用pathlib模块。它也属于python标准库,在我看来,它的使用可能比os模块更直观。

import pathlib
def check_links_for_all_files(directory_name):
directories = [pathlib.Path(directory_name)]
for directory in directories:
for file in directory.iterdir():
if file.is_dir():
directories.append(file)
continue
print(file.name)
if file.suffix == '.html':
check_link(file)

您在主目录上进行迭代,但不进入子目录。尝试使用os.path.isdir来处理子目录。

可以这样做:

def check_links_for_all_files(directory_name):
for file in os.listdir(directory_name):
path = os.path.join(directory_name, str(file))
if os.path.isdir(path):
check_links_for_all_files(path)

if path.endswith(".html"): #or filename.endswith(".php"):
check_link(path)
else:
continue

请注意,这将处理整个目录树,而不仅仅是子目录的第一跳。

os.walk非常有效地迭代所有文件和子文件夹,下面是一个例子:

import os

def check_links_for_all_files(directory_name):
for root, dirs, files in os.walk(directory_name):
for file in files:
if file.endswith(".html"):  # or file.endswith(".php"):
file_path = os.path.join(root, file)
check_link(file_path)
else:
continue
if __name__ == '__main__':
check_links_for_all_files("/Users/hbohra/Downloads/")
import glob
import os
def check_links_for_all_files(directory_name):
for file_path in glob.glob(
os.path.join(directory_name, '**', '*.html'),recursive=True):
check_link(file_path)

最新更新