如何基于Python DataFrame批量创建对应用户的Zip压缩文件夹
解决方案
你的问题出在将用户名和PDF列表拆成了两个独立序列,循环时无法一一映射,导致每个压缩包都写入了所有用户的PDF文件。只需遍历DataFrame的每一行,同时获取对应用户名和其PDF列表即可解决。
修正后的代码
import pandas as pd from zipfile import ZipFile data = {'name':['aaron', 'ben', 'charlie', 'daniel'], 'pdfs':[['aaron1.pdf', 'aaron2.pdf', 'aaron3.pdf'], ['ben1.pdf', 'ben2.pdf'], ['charlie3.pdf', 'charlie5.pdf'], ['dan_age.pdf', 'daniel1.pdf']]} df = pd.DataFrame(data, columns = ['name', 'pdfs']) # 遍历DataFrame的每一行,同时获取用户名和对应的PDF列表 for _, row in df.iterrows(): user_name = row['name'] user_pdfs = row['pdfs'] # 用上下文管理器创建并操作Zip文件,自动处理关闭 with ZipFile(f"{user_name}.zip", 'w') as zipf: for pdf in user_pdfs: zipf.write(pdf)
代码说明
df.iterrows():遍历DataFrame的每一行,返回行索引和行数据,这里用_忽略索引,直接取row获取当前用户的信息。with ZipFile(...) as zipf:使用上下文管理器,确保压缩文件在操作完成后自动关闭,避免资源泄漏。- 内层循环仅遍历当前用户的
user_pdfs列表,只写入该用户对应的PDF文件,实现一一映射。
内容的提问来源于stack exchange,提问作者Paul Furey
相关产品推荐
相关产品推荐

