Python筛选特定国家推文程序运行无报错但输出文件为空求解
问题根因及修复方案
核心错误点
json.load()用法错误:json.load()用于读取文件对象,你传入的是每行的字符串,应该改用json.loads()(s代表string),这个错误被你后面的try...except吞了所以没有任何报错提示。- 边界框字符串包含非法字符:你定义的
liste里有大量多余空格、多余引号,比如'- 1.3061'负号后有空格、'33.597 6'数字中间有空格、甚至还有混进去的"符号,转换浮点型时直接报错被忽略,永远进不了写入逻辑。 - 异常捕获范围过大:你把坐标判断逻辑全放在
try...except里且出错直接pass,所有错误都被吞了,根本看不到哪里出问题。 - 边界框坐标顺序混乱:部分边界框的x最小/最大值、y最小/最大值顺序写反,导致即使坐标符合也永远判断失败。
- 常量定义位置错误:
liste是固定的边界框列表,放在循环内部每次重复定义,没必要还降低效率。
修复后的代码
import codecs import json # 提前处理干净边界框,把非法字符去掉,转换成浮点型元组,避免每次循环重复处理 # 格式统一为 (x_min, y_min, x_max, y_max) valid_bboxes = [ (2.704, 34.6152, 7.9652, 36.6056), (2.0228, 32.7168, 7.4818, 34.7812), (-1.3061, 32.7534, 2.0216, 34.8177), (-0.8336, 34.0182, 2.494, 35.6891), (-1.5478, 33.5976, -0.6151, 35.2155), (0.1332, 35.1851, 1.9447, 35.9295), (1.056, 35.6663, 2.8675, 36.4372), (2.8797, 35.9412, 3.1202, 36.7737), (-0.8886, 32.3935, 7.4928, 34.2722), (-0.64, 22.87, 7.95, 32.51), (1.21, 22.15, 9.18, 27.94), (-8.5, 27.43, -0.18, 28.57), (2.704, 34.6152, 7.9652, 36.6056) ] # 用with语句自动管理文件关闭,避免数据丢失 with codecs.open("tweets.json", 'r', 'utf-8') as f, open('texte.txt', 'w', encoding='utf-8') as resultat: for line in f: line = line.strip() if len(line) < 10: continue # 改用json.loads解析字符串 try: status = json.loads(line) except json.JSONDecodeError: continue # 检查坐标字段 if status.get('coordinates') is None: continue try: x, y = status['coordinates']['coordinates'][0], status['coordinates']['coordinates'][1] except (KeyError, IndexError): continue # 遍历所有边界框判断 for x_min, y_min, x_max, y_max in valid_bboxes: if x_min <= x <= x_max and y_min <= y <= y_max: print("匹配到符合要求的推文") resultat.write(line + '\n') # 匹配到一个就跳出循环,不用继续判断其他边界框 break
验证说明
如果修改后文件还是为空,可以在解析完status之后加一行print(status.get('coordinates')),确认你的tweets.json里确实有带coordinates字段的推文,避免本身数据就没有位置信息导致输出为空。
内容的提问来源于stack exchange,提问作者user15847315
相关产品推荐
相关产品推荐

