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