python操作文件--批量修改文件名,替換文件/文件夾名中的字符串(已使用遞歸算法完善代碼,可通用任何文件目錄)
最近搞了一些課程資源,但是每個文件后面都有+vx的廣告就比較煩,於是寫了個python操作文件批量修改文件名,替換文件/文件夾名中的字符串程序,順手復習一下好久好久大概有2,3年沒寫過的python
遞歸遍歷獲取文件目錄的字典,再遍歷字典根據傳入的參數(想替換的字符串,新字符串,文件目錄字典)修改文件名
import os
# 將傳入參數的文件路徑中的所有文件路徑遞歸遍歷返回到傳入的all_files字典中
def show_files(path, all_files):
# 首先遍歷當前目錄所有文件及文件夾
file_list = os.listdir(path)
# 准備循環判斷每個元素是否是文件夾還是文件,是文件的話,把名稱傳入list,是文件夾的話,遞歸
for file in file_list:
# 利用os.path.join()方法取得路徑全名,並存入cur_path變量,否則每次只能遍歷一層目錄
cur_path = os.path.join(path, file)
# 判斷是否是文件夾
if os.path.isdir(cur_path):
show_files(cur_path, all_files)
else:
all_files.setdefault(path, []).append(file)
# all_files.append(os.path.join(path, file))
return all_files
# 傳入要替換文件/文件夾中包含的字符串,要替換為的字符串,和文件dict
def modify_file_name(old_str, new_str, all_files, root_src):
file_count = 0
modify_folder_count = 0
modify_file_count = 0
# 先修改文件名
for folder in all_files:
for file in all_files[folder]:
if old_str in file:
new_name = file.replace(old_str, new_str)
os.rename(os.path.join(folder, file), os.path.join(folder, new_name))
print(file + "已成功修改為: " + new_name)
modify_file_count += 1
file_count += 1
# 再修改文件夾名
for folder in all_files:
if old_str in folder:
os.rename(folder, folder.replace(old_str, new_str))
modify_folder_count += 1
return [file_count, modify_folder_count, modify_file_count]
if __name__ == '__main__':
src = "E:\\我的文件\\教程"
# 傳入空的dict接收文件名
get_all_files = show_files(src, {})
count_list = modify_file_name("【更多IT教程 微信xxx】", "", get_all_files, src)
print("文件夾數量: " + str(len(get_all_files)))
print("文件數量: " + str(count_list[0]))
print("成功修改文件夾: " + str(count_list[1]))
print("成功修改文件: " + str(count_list[2]))
這是改好的截圖,之前每個后面都有"+vx xxx"字符串
然后每個文件夾中有一堆文件(圖片中已經是修改好的了)