Python - walk()方法详解3

除了遍历某个文件夹以及其子文件夹和所有的文件外,我们应该更多的是,对目标文件的处理,比如修改批量文件名,批量修改文件扩展名,或者针对某一类的文件操作,复制备份都可以的。

1. 最简单的实现统计某种类型文件的数量

def Get_pdf_file_counts(folderpath, extendType):

“”"

获取指定扩展名文件的数量

:param folderpath: 要查询的文件夹路径

:param extendType: 文件类型,如.pdf

:return: 返回该类的文件数量"""

count =0

for fpath, dir_list, file_listin os.walk(folderpath):

for filenamein file_list:

if filename[-3:] == extendType:# 指定文件类型

count +=1

#  显示文件全路径和文件名称(包含扩展名)

print(os.path.join(fpath, filename))

return count

例如:

D:\Test\新建文本文档 - 副本 (2).txt

D:\Test\新建文本文档 - 副本 (3).txt

D:\Test\新建文本文档 - 副本.txt

D:\Test\新建文本文档.txt

D:\Test\Test1\S1新建文本文档 - 副本 (2).txt

D:\Test\Test1\S1新建文本文档 - 副本.txt

D:\Test\Test1\S1新建文本文档.txt

D:\Test\Test2\S2新建文本文档 - 副本 (2).txt

D:\Test\Test2\S2新建文本文档 - 副本.txt

D:\Test\Test2\S2新建文本文档.txt

D:\Test\Test2\Test2_1\子目录2下的子目录的文件 - 副本.txt

D:\Test\Test2\Test2_1\子目录2下的子目录的文件.txt

文件数量: 12

打印出具体文件,方便验证是否统计正确,可以不显示具体文件细节,之返回统计数量

2. 实现扩展名的批量修改

文件类型都是txt,批量修改为pdf

sh

实现代码如下:

# 实现扩展名的修改

def Mofify_file_Extension_Type(source_folder, old_type, new_type):

for fpath, dir_list, file_listin os.walk(source_folder):

for filenamein file_list:

if filename[-3:] == old_type:

sourcefile = os.path.join(fpath, filename)

print(sourcefile)

source_part = os.path.splitext(sourcefile)

print(source_part)

targetfile =str(source_part[0]) +"." + new_type

print(targetfile)

os.rename(sourcefile, targetfile)

打印输出只是为了方便调试问题,可直接删除的,效果如上2张截图,轻松实现所有文件的类型切换。

Mofify_file_Extension_Type(r"D:\Test",‘txt’,‘pdf’)

3. 实现文件名中的部分字符串修改

我的演示文件都是复制创建的,所以在中文操作系统中显示“副本”

实现副本修改为Copy

# 实现文件名的修改,将名字中的某些字符串替换位新的字符串

def Mofify_Parts_file_Name(source_folder, sourceStr, targetStr):

for fpath, dir_list, file_listin os.walk(source_folder):

for filenamein file_list:

sourcefileName = filename

print(sourcefileName)

targetfileName =str.replace(sourcefileName, sourceStr, targetStr)  #  +".txt"

print(targetfileName)

os.rename(os.path.join(fpath, sourcefileName), os.path.join(fpath,targetfileName))

测试验证:

Mofify_Parts_file_Name(r"D:\Test",‘副本’,‘Copy’)

很容易将“副本” 修改为“Copy”, 当然也很容易将“Copy“修改为”副本“

Mofify_Parts_file_Name(r"D:\Test",‘Copy’,‘副本’)

子目录中文件也会被执行的。

4. 实现指定文件类型的复制

# 将源文件夹中指定类型的文件复制到目标文件夹

def backup_file(source, target, file_extend):

if not os.path.exists(target):

os.mkdir(target)

for root, sub_folders, filesin os.walk(source):

for fin files:

if f[-3:] == file_extend:

source_file = os.path.join(root, f)

print(source_file)

target_file = os.path.join(target, f)

shutil.copy(source_file, target_file)fulue

上函数即可实现将指定类型的文件复制到指定文件夹,print函数输出的都可以忽略。只是方便观察。

backup_file(r’D:\test’, r’D:\test2’, ‘pdf’)

实现效果:

将Test中的所有pdf文件复制到了Test2,test2不存在时自动创建该文件夹

上述方法不复制子文件夹,也就不保留原有的文件结构。

4. 完整备份整个文件夹

就不需要walk方法了,简单一句代码:

import shutil

# 直接备份整个文件夹

shutil.copytree(r’D:\test’, r’D:\test2’)

而且test2不需要提前创建,不存在复制时直接创建OK。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flysh05

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值