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