You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 22:54:04