【Python 篇】批量删除、修改、创建、遍历、压缩、提取文件或文件夹(办公好帮手),简单易上手

场景描述

有的时候我们在工作或生活中总会遇到批量操作文件夹,但是有时候自己手动一个个修改、删除、重命名文件或文件夹会比较麻烦、很费时间。比如:今天在整理资料的时候发现有时候拿到的压缩文件,解压后竟然不是同名文件夹,而是一堆文件集合,一个两个文件压缩包还好,但是一旦多了又不能一起解压时就很让人头疼了。既然都是些重复劳动何不让程序帮我们做更好。今天就记录下python的操作,以方便后续查看。

代码演示

  • 批量重命名文件或文件夹

import os

filePath = r'D:\tools'  # 这里是传入文件夹路径的地方
list = os.listdir(filePath)
for file in list:
    os.chdir(filePath)  # 更改当前路径
    c_file = file.replace('a', 'b')  # 这里使用的是替换的方法
    os.rename(file, c_file)  # 重命名

上面的程序就是遍历tools文件夹下面的文件,然后把文件中文件名带a的字符替换成b
只需要把你想要修改的文件夹路径复制到上面,修改好想修改的地方,执行代码即可。

代码运行前:
在这里插入图片描述
代码运行后:
在这里插入图片描述

  • 批量有条件的删除文件或文件夹

import os
from os import listdir

filePath = r'D:\tools'
for file_name in listdir(filePath):
    if file_name.endswith('.txt'):
        os.remove(filePath + '\\' + file_name)

上面的程序就是删除tools文件夹下面以.txt结尾的文件。注意删除后文件不可以在回收站恢复
只需要把你想要修改的文件夹路径复制到上面,修改好想修改的地方,执行代码即可。

代码运行前:
在这里插入图片描述
代码运行后:
在这里插入图片描述

  • 当然也可以删除单个文件

import os

filePath = r'D:\tools'  # 这里是传入文件夹路径的地方
os.remove(filePath + '\\' + "a.txt")  # 这里写你想要删除的文件名

  • 批量创建文件夹

# -*- coding: UTF-8 -*-
import os

for i in range(1, 5):  # 这里是需要循环创建的次数,1--5之间除去5就是4次
    path = r'D:\tools\a' + str(i)
    print(path)
    os.mkdir(path)  # 创建文件夹的代码

上面的程序就是在tools文件夹下批量创建文件夹。循环了四次,也就是创建四个文件夹
只需要把你想要修改的文件夹路径复制到上面,修改好想修改的地方,执行代码即可。

代码运行前:
在这里插入图片描述
代码运行后:
在这里插入图片描述

  • 移动一个文件到其他文件夹

import shutil

shutil.move(r'D:\tools\a.py', r'D:\tools\my')

也可以批量移动,只要加上判断条件循环遍历文件夹即可。

  • 遍历文件夹

import os

'''
 这里定义了一个函数,传入的参数主要是文件夹路径和一个列表(Java中数组的意思)
 运用了递归调用,我这里是筛选出文件夹下有.ziw文件的文件夹路径并放入了列表
 传入的条件可以自行删改
'''


def recursive_listdir(path, lst):
    files = os.listdir(path)
    for file in files:
        file_path = os.path.join(path, file)

        if os.path.isfile(file_path):
            if file.endswith('.ziw'):
                lst.append(path)

        elif os.path.isdir(file_path):
            recursive_listdir(file_path, lst)


# 定义了的一个空的列表做实参
lt = []
# 传入需要的遍历的文件夹路径和实参列表
recursive_listdir(r'D:\tools', lt)
# 这里是做了去重处理
lists = list(set(lt))
# 这里是打印出列表中的元素
for x in lists:
    print(x)

这里定义了一个函数,传入的参数主要是文件夹路径和一个列表(Java中数组的意思)
运用了递归调用,我这里是筛选出文件夹下有.ziw文件的文件夹路径并放入了列表。

运行结果如下:
在这里插入图片描述

  • 解压缩.zip文件或.ziw文件

import zipfile

filePath = r'D:\tools\a4'
# 压缩文件路径
zip_path = filePath + "\\" + r'a.ziw'
# 文件存储路径
save_path = filePath

# 读取压缩文件
file = zipfile.ZipFile(zip_path)
# 解压文件
print('开始解压...')
file.extractall(save_path)
print('解压结束。')
# 关闭文件流
file.close()

这里是解压缩指定的.ziw文件,并放入的当前所在文件夹。
注意.zip文件夹也是一样的操作

代码运行前:
在这里插入图片描述
代码运行后:
在这里插入图片描述

  • 场景描述的解决方案的代码完整版。也就是批量解压压缩包并放入重命名文件夹,最后删除压缩包。

# -*- coding: UTF-8 -*-
import os
import shutil
import zipfile

'''
 这里定义了一个函数,传入的参数主要是文件夹路径和一个列表(Java中数组的意思)
 运用了递归调用,我这里是筛选出文件夹下有.ziw文件的文件夹路径并放入了列表
 传入的条件可以自行删改
'''


def recursive_listdir(path, lst):
    files = os.listdir(path)
    for file in files:
        file_path = os.path.join(path, file)

        if os.path.isfile(file_path):
            if file.endswith('.ziw'):
                lst.append(path)

        elif os.path.isdir(file_path):
            recursive_listdir(file_path, lst)


# 定义了的一个空的列表做实参
lt = []
# 传入需要的遍历的文件夹路径和实参列表
recursive_listdir(r'D:\tools', lt)
# 这里是做了去重处理
lists = list(set(lt))

# 这里主要是将筛选出的文件夹路径下的ziw压缩文件解压出来并放入同名文件夹,随后删除
for fileName in lists:
    filePath = fileName
    list_lt = os.listdir(filePath)
    for file in list_lt:
        c_file = file.replace('.ziw', '')  # 删除当前文件后缀
        p1 = filePath + "\\" + file  # 当前文件路径
        path = filePath + "\\" + c_file  # 当前文件路径没有后缀名
        os.mkdir(path)  # 创建文件夹
        shutil.move(p1, path)  # 移动文件到指定目录
        zip_path = path + "\\" + file  # 压缩文件路径
        save_path = path  # 文件存储路径
        file1 = zipfile.ZipFile(zip_path)  # 读取压缩文件
        file1.extractall(save_path)
        file1.close()  # 关闭文件流
        os.remove(path + '\\' + file)  # 删除文件
print("解压结束")


批量解压压缩包并放入重命名文件夹,最后删除压缩包。比如说:tools文件夹下面有很多文件,每个文件里面都还有文件和文件夹,那就遍历所有的文件,将带有压缩包的文件夹记录下来。最后一个个去所在路径的文件夹将压缩包解压出来并放入同名文件夹。都是批量操作,递归调用。
运行代码前:
在这里插入图片描述
tools文件夹下有5个文件夹,其中a1a3a4文件夹下面有.ziw为后缀的压缩包。如下图所示

在这里插入图片描述
运行代码后:
在这里插入图片描述

每一个有压缩包的文件夹都是解压出来,并且放入了同名文件夹。也就是解决了解压出来多个文件的问题。

最后总结

文件操作是工作生活中时常遇到的事,有时候代码解决能提高一点效率,但是其实要写好代码去运行也挺花时间的。搞不好写代码的时间都够自己的操作的时间了。所以做个记录,以便后续需要的用到时可以翻阅。希望对大家有所帮助。走之前别忘了给博主一个小小的赞或关注,谢谢。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

博扬java张

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

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

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

打赏作者

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

抵扣说明:

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

余额充值