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