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