前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Python]找出文件夹(及其子文件夹)中的文件并复制到目标文件夹中

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

作者头像
祥知道
发布2020-03-10 17:03:07
3.1K0
发布2020-03-10 17:03:07
举报
文章被收录于专栏:祥的专栏

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

原文链接:https://cloud.tencent.com/developer/article/1596482


文章目录

代码语言:txt
复制
- @[toc]1.问题引出源码及测试结果2.1. 程序源码2.2. 测试结果文本提示

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

1.问题引出

下载了整个2018年和2019年上半年的经济学人,不过是根据发刊日期建立了多个文件夹,我想复制出里面所有的*.epub格式的电子书,不可能一个一个的复制吧,这样也太low了,遂有了这个想法。

而且为了便于按照名字排序,最后复制后的名字做了处理,只保留了文件名中的数字(经济学人发布的年份,因为不是一个人发布的名字多少不统一。The Economist 20190525.epubTEA20190302.epub或者TE_02_2_2019.epub

2. 源码及测试结果

2.1. 程序源码

代码语言:javascript
复制
# 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. 测试结果

文本提示

代码语言:javascript
复制
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    
================
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1.问题引出
  • 2. 源码及测试结果
    • 2.1. 程序源码
      • 2.2. 测试结果
        • 文本提示
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档