场景描述
有的时候我们在工作或生活中总会遇到批量操作文件夹,但是有时候自己手动一个个修改、删除、重命名文件或文件夹会比较麻烦、很费时间。比如:今天在整理资料的时候发现有时候拿到的压缩文件,解压后竟然不是同名文件夹,而是一堆文件集合,一个两个文件压缩包还好,但是一旦多了又不能一起解压时就很让人头疼了。既然都是些重复劳动何不让程序帮我们做更好。今天就记录下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文件
的文件夹路径并放入了列表。
运行结果如下:
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个文件夹,其中a1
、a3
、a4
文件夹下面有.ziw
为后缀的压缩包。如下图所示
运行代码后:
每一个有压缩包的文件夹都是解压出来,并且放入了同名文件夹。也就是解决了解压出来多个文件的问题。
最后总结
文件操作是工作生活中时常遇到的事,有时候代码解决能提高一点效率,但是其实要写好代码去运行也挺花时间的。搞不好写代码的时间都够自己的操作的时间了。所以做个记录,以便后续需要的用到时可以翻阅。希望对大家有所帮助。走之前别忘了给博主一个小小的赞或关注,谢谢。