[Python]找出文件夹(及其子文件夹)中的文件并复制到目标文件夹中



原创文章,欢迎转载。转载请注明:转载自 祥的博客

原文链接:https://blog.csdn.net/humanking7/article/details/100770685


找出文件夹(及其子文件夹)中的文件并复制到目标文件夹中

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

赞赏码New

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值