作者:零小唬

需求分析

使用Python代码处理压缩文件zip

具体完成步骤

  首先,想必大家在每次做作业或者敲代码的时候都会去网上找一些参考,有一个老师说过这样一句话,我觉得挺有道理的,现在分享给大家共勉:会将别人的代码改为自己所需要的代码是程序员,会直接自己写代码的才称得上算法工程师,我现在也是小白一个,主要就是找到相关的代码,然后再改成我需要的代码,完成相应的任务即可。

下面就是网上找到的一段关于使用Python处理压缩文件的代码喽

import zipfile
import os
from io import BytesIO

假设您已经从网页表单中获取到压缩包的内容
在这个示例中,假设文件内容存储在名为"file"的变量中
file_content = b'\x50\x4b\x03\x04\x14\x00\x00...' # 替换为您的压缩包内容

将压缩包内容转换为文件对象
zip_file = zipfile.ZipFile(BytesIO(file_content), 'r')

获取目标目录路径(用于提取文件)
target_dir = 'path/to/target/directory' # 替换为您的目标目录路径
os.makedirs(target_dir, exist_ok=True) # 创建目标目录(如果不存在)

提取压缩包内的文件到目标目录
zip_file.extractall(target_dir)

获取提取后的文件列表
extracted_files = zip_file.namelist()

遍历提取后的文件列表
for file_name in extracted_files:
# 处理每个文件的路径
extracted_file_path = os.path.join(target_dir, file_name)

# 在这里处理文件内容,例如打印文件名和内容
with open(extracted_file_path, 'r') as file:
    print('File:', file_name)
    print('Content:', file.read())

不知道大家有没有看明白,我觉得注释还是标注的很清晰了,下面为大家解读一下这段代码。

代码解读

  这是一个使用Python处理压缩包的示例代码。这个程序从网页表单中获取到一个压缩包的内容,并将其中的所有文件提取到指定的目录中。对于每个文件,程序打印文件名和内容。

具体步骤包括:

  • 将压缩包内容转换为文件对象:使用BytesIO将压缩包内容转换为文件对象,以便后续处理。
  • 提取压缩包内的文件到目标目录:使用ZipFile.extractall()提取所有文件到指定的目录中。这里使用os.makedirs()创建目标目录(如果不存在)。
  • 获取提取后的文件列表:使用ZipFile.namelist()获取提取后的所有文件列表。
  • 遍历提取后的文件列表:使用for循环遍历所有提取后的文件。
  • 处理文件内容:打开每个文件并读取其中的内容。

  上面这段代码,正常工作是没有问题的,但是有一个小问题:

  在提取完文件之后,应该关闭压缩包对象,然后再遍历提取后的文件列表。这样可以防止在处理文件时覆盖压缩包对象,导致错误。

  所以,需要在使用压缩包对象(ZipFile)之后添加一行关闭该对象的代码,如下所示:

zip_file = zipfile.ZipFile(BytesIO(file_content), 'r')
zip_file.extractall(target_dir)
zip_file.close()   # 关闭压缩包对象

extracted_files = os.listdir(target_dir)  # 列出提取后的目录列表
for file_name in extracted_files:
 ......

  使用zip_file.close()关闭压缩包对象后,再遍历提取的文件列表(使用os.listdir()),以确保没有使用已经关闭的压缩包对象。

完整代码

import zipfile
import os
from io import BytesIO

# 假设您已经从网页表单中获取到压缩包的内容
# 在这个示例中,假设文件内容存储在名为"file_content"的变量中
file_content = b'\x50\x4b\x03\x04\x14\x00\x00...'  # 替换为您的压缩包内容

# 将压缩包内容转换为文件对象
zip_file = zipfile.ZipFile(BytesIO(file_content), 'r')

# 获取目标目录路径(用于提取文件)
target_dir = 'path/to/target/directory'  # 替换为您的目标目录路径
os.makedirs(target_dir, exist_ok=True)  # 创建目标目录(如果不存在)

# 提取压缩包内的文件到目标目录
zip_file.extractall(target_dir)

# 关闭压缩包对象
zip_file.close()

# 获取提取后的文件列表
extracted_files = os.listdir(target_dir)

# 遍历提取后的文件列表
for file_name in extracted_files:
    # 处理每个文件的路径
    extracted_file_path = os.path.join(target_dir, file_name)

    # 在这里处理文件内容,例如打印文件名和内容
    with open(extracted_file_path, 'r') as file:
        print('File:', file_name)
        print('Content:', file.read())

  🎉记录是为了不停的思考,创作更是为了更好的思考,有人说过:2023年以后的中国市场将永远属于长期主义者,bug是改不完的也是写不完的,只能说这次遇到了希望下次不会在出现同样的bug就行