【问题标题】:reading bytearray formatted strings from a file into python将字节数组格式的字符串从文件读入python
【发布时间】:2017-10-16 00:54:32
【问题描述】:

我有一个文本文件,其中每一行都有类似字节数组的格式化字符串,例如: b'{"delete":{"status":{"id":554377123205378048,"id_str":"554377123205378048","user_id":981513812,"user_id_str":"981513812"},"timestamp_ms":"1508108338761"} }'

(这来自使用命令行(例如“python twitterstream.py > output.txt”)放入文本文件的流式 twitter 数据)

我现在正在尝试读取每一行并在其上使用 json.loads() 来获取该行应该是的字典。

如果我使用 line = open('output.txt').readline() 我会得到一个如下所示的字符串: 'b\'{"delete":{"status":{"id":554377123205378048,"id_str":"554377123205378048","user_id":981513812,"user_id_str":"981513812"},"timestamp_ms":"1508108338761 "}}\'\n'

请注意像“b\”这样添加的额外转义序列。 json.loads() 无法再解析这一行。如果我手动将内容复制到 python 控制台中,我可以让它解析原始行,这样行本身就可以了。我的文件 I/O 是怎么回事?

此外,当我手动将行复制到变量时,它被保存为 bytearray 类型(字节),所以我想问题是我如何让 python 在文件行中读取它们作为文字字节数组,因为它们被写入?

【问题讨论】:

    标签: python json file-io readline twitter-streaming-api


    【解决方案1】:
    >>> ast.literal_eval("""b'{"delete":{"status":{"id":554377123205378048,"id_str":"554377123205378048","user_id":981513812,"user_id_str":"981513812"},"timestamp_ms":"1508108338761"}}'""")
    b'{"delete":{"status":{"id":554377123205378048,"id_str":"554377123205378048","user_id":981513812,"user_id_str":"981513812"},"timestamp_ms":"1508108338761"}}'
    >>> json.loads(ast.literal_eval("""b'{"delete":{"status":{"id":554377123205378048,"id_str":"554377123205378048","user_id":981513812,"user_id_str":"981513812"},"timestamp_ms":"1508108338761"}}'""").decode('utf-8'))
    {'delete': {'status': {'user_id_str': '981513812', 'id_str': '554377123205378048', 'id': 554377123205378048, 'user_id': 981513812}, 'timestamp_ms': '1508108338761'}}
    

    【讨论】:

    • 谢谢你的工作!我能够直接在我的 fp.readline() 上执行 json.loads(ast.literal_eval(line))。你对发生的事情有解释吗?我仍然想了解文件 i/o 为何/如何更改我的文本行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 2021-07-31
    • 2022-12-21
    • 1970-01-01
    相关资源
    最近更新 更多