Python新手求助:Twitter导出CSV处理程序运行无效果,求代码排查
排查你的Twitter CSV处理代码问题
首先得说,你的思路方向是对的,但代码里有几个关键问题导致程序运行后没对文件做出任何修改,咱们一个个拆解清楚:
1. 对csv.DictReader的核心误解
csv.DictReader返回的每一行row是字典类型——键对应CSV的表头(或你指定的fieldnames),值对应列的内容。你用row[y][x]去访问完全错误,字典不是二维数组,这种写法要么直接抛出KeyError,要么触发你的except块让y自增,等于根本没执行到筛选逻辑。
2. 完全缺失写入处理内容的逻辑
你只打开文件做了读取操作,却没有创建csv.DictWriter/csv.writer来把筛选后的内容写回文件。而且r+模式下直接覆盖写很容易出现读写位置混乱的问题,行业通用做法是:读取原文件→处理内容→写入临时文件→最后替换原文件(或直接写入新文件)。
3. del_cell是未定义操作
就算逻辑走到了else分支,del_cell既不是Python内置函数,也没看到你自定义它,这会直接抛出NameError,然后进入except块,等于这部分删除逻辑完全没生效。
4. 异常处理过于宽泛
except:会捕获所有异常,包括语法错误、索引错误等,这会把真正的错误信息隐藏起来,让你完全不知道问题出在哪。调试时应该只捕获特定异常,比如KeyError,或者至少在except里打印错误详情:except Exception as e: print(e)。
修改后的示例代码
我写了个贴合你需求的简化版,核心是保留包含指定关键词的列(如果你的需求是保留单元格内容含关键词的行,可自行调整逻辑):
import csv import os # 定义需要保留的关键词列表 keep_keywords = [ 'created_at', 'id:', 'text:', 'source:', 'user:{', 'name:', 'screen_name:', 'location:', 'url:', 'description', 'translator_type:', 'protected', 'verified', 'followers', 'friends', 'listed', 'favourites', 'statuses', 'time', 'lang:', 'is_translator', 'default_profile', 'notification', 'geo:', 'coordinates:', 'place:', 'contributors:', 'quoted_status', 'retweeted_status' ] # 读取原文件,处理后写入临时文件 with open('csvdata.csv', 'r', newline='') as infile, open('temp.csv', 'w', newline='') as outfile: reader = csv.DictReader(infile, dialect='excel') # 筛选需要保留的列(匹配关键词的表头) keep_fields = [field for field in reader.fieldnames if any(keyword in field for keyword in keep_keywords)] writer = csv.DictWriter(outfile, fieldnames=keep_fields, dialect='excel') writer.writeheader() for row in reader: # 构建只包含保留字段的新行 filtered_row = {field: row[field] for field in keep_fields} writer.writerow(filtered_row) # 替换原文件(如果不需要备份,直接覆盖即可) os.replace('temp.csv', 'csvdata.csv')
额外调试建议
- 先打印
row看看结构:print(row),就能直观明白DictReader返回的内容是什么。 - 不要一开始就写复杂逻辑,先从读取一行、打印一行开始验证,逐步叠加筛选逻辑。
内容的提问来源于stack exchange,提问作者B. Crull
相关产品推荐
相关产品推荐

