Python组织文件 实践:拷贝某种类型的所有文件

Stella981
• 阅读 557
#! python3
#chapter09-test01- 遍历目录树,查找特定扩展名的文件不论这些文件的位置在哪里,都将他们
#拷贝到一个新的文件夹中

import os,shutil,pprint


#寻找指定文件夹内的某种类型的文件
#返回匹配文件的绝对地址的一个列表
#folder-指定的文件夹地址
#fileType-要查找类型的扩展名
def findFileType(fileType,folder):
    matchFileAbs=[] #用于存放查到的文件绝对地址
    #使用walk()遍历目录树
    for foldername,subfolders,filenames in os.walk(path):
        #遍历这个文件名列表,然后匹配扩展名
        for filename in filenames:
            extensionName=os.path.splitext(filename)
            if extensionName[1]==fileType:
                #获取绝对路径,然后拷贝
                fileAbsPath=os.path.join(foldername,filename)
                fileAbsPath=os.path.abspath(fileAbsPath)
                matchFileAbs.append(fileAbsPath)
    return matchFileAbs

#拷贝文件
#srcfileAbs-一个包含文件地址的列表
#desFolder-指定用来存放的文件夹
def copyFile(srcfileAbs,desFolder):
    for srcPath in srcfileAbs:
        shutil.copy(srcPath,desFolder)

#为了避免出现目标文件夹不存在而copy()又不会创建文件夹造成复制失败的情况
#定义一个函数,他能让指定的地址存在
def presence(path):
    if not os.path.exists(path):
        os.makedirs(path)

desFolder=r'.\forTest\toSave2'
path=r'.\forTest'     
matchFileAbs=findFileType('.txt',path)
presence(desFolder)
copyFile(matchFileAbs,desFolder)

关于遍历文件和获取文件名怎么解决

  首先想的是使用 os.walk() 还是用 os.listdir() 的组合,使用 os.walk() 返回数据当中的当前文件夹,然后对其使用 os.listdir() 获取文件名;写完后又发现这样太臃肿了,明明 os.walk() 就能返回当前文件夹下的文件名,遂改回来了

遇到的问题

  1)忘记了 os.path.splitext(path) 返回的是一个包含文件名与扩展名元组,还以为他只返回一个扩展名的字符串

  2)在函数内部对全局变量操作时,我想到了这样是不行的,并进行了测试。完事后有个想法,能不能把这种改错方式迁移到修改Bug的过程中,既能够想到,又能够做到在该BUG的时候去溯源

  3)虽然这个程序很简单,但我这次编写非常顺利,且逻辑清晰,还是离不开“关注主要的”这个思想

  4)有的可以用相对地址,有的能用绝对地址 不严谨

  5)发现 shutil.copy(src,des) 假如 des 不存在,他不会新建文件夹,而是直接将所有的文件复制过去,然后你得到一个没有扩展名的文件

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这