原创文章,欢迎转载。转载请注明:转载自 祥的博客
原文链接:https://cloud.tencent.com/developer/article/1596482
- @[toc]1.问题引出源码及测试结果2.1. 程序源码2.2. 测试结果文本提示
找出文件夹(及其子文件夹)中的文件并复制到目标文件夹中
下载了整个2018年和2019年上半年的经济学人,不过是根据发刊日期建立了多个文件夹,我想复制出里面所有的*.epub
格式的电子书,不可能一个一个的复制吧,这样也太low
了,遂有了这个想法。
而且为了便于按照名字排序,最后复制后的名字做了处理,只保留了文件名中的数字(经济学人发布的年份,因为不是一个人发布的名字多少不统一。The Economist 20190525.epub
、TEA20190302.epub
或者TE_02_2_2019.epub
)
# 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('================')
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
================