在我们想利用Python来修改压缩包内的文件名前,我们需要知道,我们不能直接修改zip压缩包内的文件名的。我们需要先将zip压缩包给解压之后,再去找到解压之后想要修改的文件,修改文件名之后,再将所有文件重新压缩。 首先我们需要准备好zip的路径、zip解压的路径、最后要压缩的路径路径准备好
# 要解压的zip文件路径
path_zip = rD:softwarepycharmother_demoetesting.zip
# 要解压到的位置
path_aim = rD:softwarepycharmother_demounzipdir
# 要压缩到的路径
file_zip_path = r"D:softwarepycharmother_demo"
解压zip文件,这里我们定义一个函数,便于后面的调用
# path_zip为zip文件路径,path_aim为解压路径
def zip_extract_to(path_zip, path_aim):
作用:解压压缩包
z = zipfile.ZipFile(path_zip, r, )
for path in z.namelist():
# extract解压出来的是文件的绝对路径,可以用print打印出来看
z.extract(path, path_aim)
# print(z.extract(path, path_aim))
z.close()
解压zip之后,我们需要找到我们想要修改的文件,将其文件名修改之后再压缩成zip文件。
# 定义一个zip文件操作对象,相当于是先创建一个zip文件,拿着这个zip对象去往里面填充文件
myzip = zipfile.ZipFile(f"{
path_aim}.zip", "w", zipfile.ZIP_DEFLATED)
# 遍历目录下的所有文件,并修改usr文件名
for root, dirs, files in os.walk(path_aim): # root为遍历的文件夹的路径,dirs为遍历的文件夹下一层的文件夹,files为遍历的文件夹下一层的所有的文件
for file in files:
if file.endswith(".usr"): # 找到后缀为.usr的文件
usr_path = os.path.join(root, file) # 拼接usr文件的绝对路径
root_dir = os.path.dirname(usr_path) # usr文件的上一层目录路径
os.rename(usr_path, os.path.join(root_dir, f"etesting{
int(time.time() * 1000)}.usr")) # os.rename(src,dst)
# 压缩文件
for root, dirs, files in os.walk(path_aim): # root为遍历的文件夹的路径,dirs为遍历的文件夹下一层的文件夹,files为遍历的文件夹下一层的所有的文件
for file in files:
# print(os.path.join(root,file))
abspath = os.path.join(root, file)
# 写入到zip文件中使用相对路径,将需要添加到zip里面的文件的文件路径前缀修改成压缩包的路径,这里就要使用os.path.relpath()方法
# os.path.relpath(path,start=)方法,path填写添加到zip的文件路径,start后面填写文件放到zip中的开始路径,它会自动匹配path的路径,如果start的路径和path路径前面有相同的,它会自动去除
myzip.write(abspath, os.path.relpath(abspath, start="D:softwarepycharmliuyingweiother_demo"))
myzip.close() # 关闭zip对象的使用
这样操作之后我们就可以把zip中想要修改的文件名给修改好了。如果我们后续需要持续的操作这个压缩包,我们还可以将unzipdir这个文件夹中的文件全部清空,相当于做一个后置操作
# data文件夹位置
data = os.path.join(path_aim, "data")
print("data:", data)
for root, dirs, files in os.walk(path_aim):
# print(len(files))
if len(files) > 0:
# 删除所有文件
for file in files:
os.remove(os.path.join(root, file))
if len(data) > 0:
shutil.rmtree(data)