要使用Python解压ZIP文件并保留文件属性,可以使用zipfile
模块
import zipfile
import os
from datetime import datetime
def zip_info(file_info):
return {
'filename': file_info.filename,
'datetime': datetime.fromtimestamp(file_info.date_time).strftime('%Y-%m-%d %H:%M:%S'),
'size': file_info.file_size,
'compression': file_info.compress_size,
'method': file_info.compress_type
}
def extract_zip(zip_path, extract_to):
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(extract_to)
print(f"Extracted {zip_ref.namelist()}")
extracted_files = []
for file_info in zip_ref.infolist():
extracted_file = {
'filename': file_info.filename,
'datetime': zip_info(file_info)['datetime'],
'size': zip_info(file_info)['size'],
'compression': zip_info(file_info)['compression'],
'method': zip_info(file_info)['method']
}
extracted_files.append(extracted_file)
return extracted_files
if __name__ == "__main__":
zip_path = 'example.zip'
extract_to = 'extracted_files'
if not os.path.exists(extract_to):
os.makedirs(extract_to)
extracted_files = extract_zip(zip_path, extract_to)
print("Extracted files with attributes:")
for file in extracted_files:
print(file)
这个示例中,我们首先定义了一个zip_info
函数,它接收一个zipfile.ZipInfo
对象并返回一个包含文件属性(如文件名、时间戳、大小、压缩方法和压缩类型)的字典。然后,我们定义了一个extract_zip
函数,它接收一个ZIP文件路径和一个解压目标目录。这个函数会解压ZIP文件并将文件保存到目标目录,同时保留文件的属性。
在__main__
部分,我们指定了ZIP文件的路径和解压目标目录,然后调用extract_zip
函数解压文件并打印提取的文件及其属性。