要使用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
函數解壓文件并打印提取的文件及其屬性。