如何用Python批量处理ZIP压缩包内所有TXT文件并生成新压缩包?
批量处理ZIP压缩包内TXT文件并生成新ZIP的解决方案
完全可以实现批量处理ZIP内的所有TXT文件并生成包含处理后CSV的新ZIP,以下是优化后的代码,整合了批量处理逻辑:
完整代码
import pandas as pd import zipfile import io def process_txt_content(txt_content): # 读取TXT内容,只保留前2列 df = pd.read_csv(io.StringIO(txt_content), usecols=[0, 1]) # 添加列头 df.columns = ['store', 'sku'] # 清理store列的前后字符 df['store'] = df['store'].str.split('R ').str[-1] df['store'] = df['store'].str.split(' -').str[0] # 将处理后的DataFrame转为CSV字符串 return df.to_csv(index=False) # 原ZIP路径和新ZIP路径 input_zip_path = "input_files.zip" output_zip_path = "processed_files.zip" # 处理ZIP文件 with zipfile.ZipFile(input_zip_path, 'r') as input_zip, \ zipfile.ZipFile(output_zip_path, 'w', zipfile.ZIP_DEFLATED) as output_zip: # 遍历原ZIP内的所有文件 for file_info in input_zip.infolist(): # 只处理TXT文件 if file_info.filename.endswith('.txt'): # 读取TXT文件内容 with input_zip.open(file_info) as txt_file: txt_content = txt_file.read().decode('utf-8') # 处理内容 processed_csv = process_txt_content(txt_content) # 生成新文件名(替换后缀为csv) new_filename = file_info.filename.replace('.txt', '.csv') # 将处理后的CSV写入新ZIP output_zip.writestr(new_filename, processed_csv)
代码说明
- 内存处理优化:使用
io.StringIO在内存中读写数据,避免生成临时文件,提升处理效率 - 逻辑封装:把单文件处理逻辑封装成
process_txt_content函数,代码结构更清晰,便于后续修改维护 - 批量遍历:通过
zipfile.ZipFile.infolist()遍历原ZIP内的所有文件,筛选出TXT格式文件进行针对性处理 - 新ZIP生成:处理后的文件以原文件名替换后缀为
.csv的形式存入新ZIP,保持文件对应关系
注意事项
- 如果你的TXT文件使用的不是逗号分隔,需要在
pd.read_csv中添加sep参数(比如制表符分隔就加sep='\t') - 确保原ZIP内的TXT文件格式与示例一致,否则需要调整列索引或字符清理逻辑
内容的提问来源于stack exchange,提问作者uranis
相关产品推荐
相关产品推荐

