[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.epubTEA20190302.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  ================