Python循环中如何避免CSV被覆盖,保存每次迭代的JSON为CSV
解决循环中CSV文件被覆盖的问题
你遇到的核心问题是每次循环都使用同一个固定文件名output_file.csv,导致后续迭代的内容直接覆盖之前的文件。只需要给每个CSV文件生成唯一的文件名即可,最直接的方式就是用当前用户的用户名作为文件名的一部分。
修改后的代码
from twarc.client2 import Twarc2 import itertools import pandas as pd import json import numpy as np # 替换为你的bearer token t = Twarc2(bearer_token="AAAAAAAAAAAAAAAAAAAAA....WTW") # 读取用户名列表 list_of_names = np.loadtxt("usernames.txt", dtype="str") # 提取请求结果中的data部分 def get_data(results): return list(itertools.chain(*[result['data'] for result in results])) user_objects = get_data(t.user_lookup(users=list_of_names, usernames=True)) for user in user_objects: following = get_data(t.following(user['id'])) print(f"User: {user['username']} Follows {len(following)}") # 直接将following转为DataFrame,无需先转JSON字符串(简化步骤) df = pd.DataFrame(following) # 使用用户名作为文件名,避免覆盖 df.to_csv(f"{user['username']}_following.csv", index=False)
关键修改点说明
- 唯一文件名:用
f"{user['username']}_following.csv"生成文件名,每个用户的关注列表会保存为类似johndoe_following.csv的独立文件,完全避免覆盖问题。 - 简化代码:不需要先把
following转成JSON字符串再读回DataFrame,直接用pd.DataFrame(following)就能转换,更高效简洁。 - 添加
index=False:避免CSV文件中多出不必要的索引列,让输出更干净。
额外注意事项
如果你的用户名列表中存在特殊字符(虽然推特用户名只允许字母、数字、下划线),可以提前对用户名做简单处理,比如替换非法字符:
safe_username = user['username'].replace('/', '_').replace('\\', '_') df.to_csv(f"{safe_username}_following.csv", index=False)
内容的提问来源于stack exchange,提问作者Camilla Ancona
相关产品推荐
相关产品推荐

