在某个文件夹及其子文件夹下创建指定名称的文件夹
import os
def create_folder(root_folder, target_folder_name):
try:
folder_path = os.path.join(root_folder, target_folder_name)
os.makedirs(folder_path, exist_ok=True)
print("文件夹创建成功:", folder_path)
except Exception as e:
print("创建文件夹时出现错误:", str(e))
def create_folder_recursively(root_folder, target_folder_name):
for dirpath, dirnames, filenames in os.walk(root_folder):
create_folder(dirpath, target_folder_name)
# 指定要创建的目标文件夹名称和根目录路径
target_folder_name = "your_target_folder_name"
root_folder = r"C:\path\to\your\root_folder"
create_folder_recursively(root_folder, target_folder_name)
删除文件夹中指定后缀的文件,但保留该文件夹下某个子文件夹中的文件
import os
def delete_files_with_suffix(root_folder, suffix, exclude_subfolder):
upper_suffix = suffix.upper()
lower_suffix = suffix.lower()
for dirpath, dirnames, filenames in os.walk(root_folder):
if dirpath.endswith(exclude_subfolder):
# 如果当前文件夹为排除的子文件夹,则跳过
continue
for filename in filenames:
if filename.endswith(upper_suffix) or filename.endswith(lower_suffix):
file_path = os.path.join(dirpath, filename)
os.remove(file_path)
print("已删除文件:", file_path)
# 指定要删除的文件后缀名、文件夹路径和需要保留的子文件夹名称
file_suffix = ".JPG"
folder_path = r"C:\path\to\your\root_folder"
exclude_subfolder = "folder_name"
delete_files_with_suffix(folder_path, file_suffix, exclude_subfolder)
删除某个文件夹及其子文件夹下的指定文件夹
import os
import shutil
def delete_folder(folder_path):
try:
shutil.rmtree(folder_path)
print("文件夹删除成功:", folder_path)
except FileNotFoundError:
print("文件夹不存在:", folder_path)
except Exception as e:
print("删除文件夹出错:", str(e))
def find_and_delete_folder(root_folder, target_folder_name):
for dirpath, dirnames, filenames in os.walk(root_folder):
for dirname in dirnames:
if dirname == target_folder_name:
target_folder_path = os.path.join(dirpath, dirname)
delete_folder(target_folder_path)
# 指定要删除的目标文件夹名称和根目录路径
target_folder_name = "your_target_folder_name"
root_folder = r"C:\path\to\your\root_folder"
find_and_delete_folder(root_folder, target_folder_name)
将文件夹中的文件(只有一个时)重命名为文件夹的名字
import os
def rename_files_to_folder_name(root_folder):
for dirpath, dirnames, filenames in os.walk(root_folder):
for filename in filenames:
folder_name = os.path.basename(dirpath)
file_path = os.path.join(dirpath, filename)
new_file_path = os.path.join(dirpath, folder_name + os.path.splitext(filename)[-1])
os.rename(file_path, new_file_path)
print(f"已重命名文件:{file_path} -> {new_file_path}")
# 指定要重命名的根文件夹路径
root_folder_path = r"C:\path\to\your\root_folder"
rename_files_to_folder_name(root_folder_path)
文件夹中只保留最大的那个文件,其余文件全部删除(子文件夹也执行相同操作)
import os
def keep_largest_file(folder_path):
# 获取所有文件的路径和大小
file_info = []
for filename in os.listdir(folder_path):
file_path = os.path.join(folder_path, filename)
if os.path.isfile(file_path): # 只处理文件,忽略子文件夹
file_size = os.path.getsize(file_path)
file_info.append((file_path, file_size))
# 根据文件大小排序,如果要保留最小的文件则设置reverse=True
file_info.sort(key=lambda x: x[1], reverse=False)
# 保留列表排序中最后的一个文件,删除其他文件
for i in range(0, len(file_info) - 1):
file_path = file_info[i][0]
os.remove(file_path)
print(f"已删除文件:{file_path}")
# 检查文件夹是否为空
if not os.listdir(folder_path):
return
# 对子文件夹执行相同操作
for filename in os.listdir(folder_path):
sub_path = os.path.join(folder_path, filename)
if os.path.isdir(sub_path): # 处理子文件夹
keep_largest_file(sub_path)
folder_path = r'C:\path\to\your\root_folder'
keep_largest_file(folder_path)
将某个文件夹中的文件名重命名,只保留其中的数字(子文件夹也执行相同操作)
import os
import re
def rename_files(folder_path):
for filename in os.listdir(folder_path):
file_path = os.path.join(folder_path, filename)
if os.path.isfile(file_path):
basename, ext = os.path.splitext(filename) # 分离文件名和扩展名
new_basename = re.sub(r'\D', '', basename) # 仅保留数字
new_filename = new_basename + ext
new_file_path = os.path.join(folder_path, new_filename)
os.rename(file_path, new_file_path)
print(f"已将文件 {filename} 重命名为 {new_filename}")
elif os.path.isdir(file_path):
rename_files(file_path) # 对子文件夹执行相同操作
# 指定文件夹路径
folder_path = r'C:\path\to\your\root_folder'
# 执行重命名操作
rename_files(folder_path)