[Python]找出文件夾(及其子文件夾)中的文件並複製到目標文件夾中
- 2020 年 3 月 10 日
- 筆記
原文鏈接:https://blog.csdn.net/humanking7/article/details/100770685
文章目錄
- @[toc]
- 1.問題引出
- 2. 源碼及測試結果
- 2.1. 程序源碼
- 2.2. 測試結果
- 文本提示
找出文件夾(及其子文件夾)中的文件並複製到目標文件夾中
1.問題引出
下載了整個2018年和2019年上半年的經濟學人,不過是根據發刊日期建立了多個文件夾,我想複製出裏面所有的*.epub
格式的電子書,不可能一個一個的複製吧,這樣也太low
了,遂有了這個想法。
而且為了便於按照名字排序,最後複製後的名字做了處理,只保留了文件名中的數字(經濟學人發佈的年份,因為不是一個人發佈的名字多少不統一。The Economist 20190525.epub
、TEA20190302.epub
或者TE_02_2_2019.epub
)

2. 源碼及測試結果
2.1. 程序源碼
# UTF-8 # 整理文件 # 將指定目錄下的對應格式的文件(eg.epub)複製到指定的目錄中 # ------------------------------------ import os import shutil #import copy def list_folders_files(path): """ 返回 "文件夾" 和 "文件" 名字 :param path: "文件夾"和"文件"所在的路徑 :return: (list_folders, list_files) :list_folders: 文件夾 :list_files: 文件 """ list_folders = [] list_files = [] for file in os.listdir(path): file_path = os.path.join(path, file) if os.path.isdir(file_path): list_folders.append(file) else: list_files.append(file) return (list_folders, list_files) def list_files_with_suffix(path, suffix): """ 返回含有特定"後綴名"的"文件"名字 :param path: "文件"所在的路徑 :param suffix: 後綴名 :return: 含有特定"後綴名"的"文件"名字 """ list_files = [] for file in os.listdir(path): #print(file) file_path = os.path.join(path, file) if not os.path.isdir(file_path): if os.path.splitext(file)[1].lower() == suffix.lower(): list_files.append(file) return list_files def list_files_with_suffix_allPath(path, suffix): """ 返回含有特定"後綴名"的"文件"名字 包括子目錄 :param path: "文件"所在的路徑 :param suffix: 後綴名 :return: 含有特定"後綴名"的"文件"名字 """ list_files = [] for dirpath, dirs, files in os.walk(path): # 遞歸遍歷當前目錄和所有子目錄的文件和目錄 for name in files: # files保存的是所有的文件名 if os.path.splitext(name)[1].lower() == suffix.lower(): filename = os.path.join(dirpath, name) # 加上路徑,dirpath是遍歷時文件對應的路徑 list_files.append(filename) return list_files def mkdir(path): # 去除首位空格 path=path.strip() # 去除尾部 符號 path=path.rstrip("\") # 判斷路徑是否存在 # 存在 True # 不存在 False isExists = os.path.exists(path) # 判斷結果 if not isExists: # 如果不存在則創建目錄 # 創建目錄操作函數 os.makedirs(path) # print('創建成功 > ',path) return True else: # 如果目錄存在則不創建,並提示目錄已存在 # print('目錄已經存在 > ',path) return False def printMatrixList(li): # 打印多維list row = len(li) col = len(li[0]) for i in range(row): for j in range(col): print(li[i][j], end=' ') print('') if __name__ == "__main__": dir_root = r"./TE2018" dir_root = r"./2019" # Step0. 尋找目錄中所有的epub l_files = list_files_with_suffix_allPath(dir_root, '.epub') l_dir = [] print('epub文件數: ', len(l_files)) # print(l_files) dir_mk = r"./all_TE2018" dir_mk = r"./all_TE2019" mkdir( dir_mk ) for file in l_files: (tmp_path, tmp_name) = os.path.split(file) # 刪除裏面除了數字外所有的東西 tmp_name = filter(str.isdigit, tmp_name ) tmp_name = "".join(tmp_name) + ".epub" # 組合新文件路徑 newFilePath = os.path.join(dir_mk, tmp_name) # 複製 shutil.copyfile(file, newFilePath) print('copy ' + newFilePath) # 複製完成 print('================') print(' copy ok ') print('================')
2.2. 測試結果
文本提示
root@qfx:/srv/qfxFtp/HDD_sdb1/qfxSamba_share/Movies4/經濟學人# ls 2019 all_TE2018 all_TE2019 find_Economist.py TE2018 陳曲經濟學人精講 root@qfx:/srv/qfxFtp/HDD_sdb1/qfxSamba_share/Movies4/經濟學人# python3 find_Economist.py epub文件數: 26 copy ./all_TE2019/20190223.epub copy ./all_TE2019/20190209.epub copy ./all_TE2019/20190216.epub copy ./all_TE2019/0222019.epub copy ./all_TE2019/20190315.epub copy ./all_TE2019/20190302.epub copy ./all_TE2019/20190322.epub copy ./all_TE2019/20190308.epub copy ./all_TE2019/20190511.epub copy ./all_TE2019/20190518.epub copy ./all_TE2019/20190525.epub copy ./all_TE2019/20190601.epub copy ./all_TE2019/20190622.epub copy ./all_TE2019/20190629.epub copy ./all_TE2019/20190608.epub copy ./all_TE2019/20190713.epub copy ./all_TE2019/20190720.epub copy ./all_TE2019/20190727.epub copy ./all_TE2019/20190810.epub copy ./all_TE2019/20190817.epub copy ./all_TE2019/20190803.epub copy ./all_TE2019/20190330.epub copy ./all_TE2019/20190413.epub copy ./all_TE2019/20190427.epub copy ./all_TE2019/20190406.epub copy ./all_TE2019/20190504.epub ================ copy ok ================