如何从 Python3 中的行 json 文件中获取实际字符串?



我必须读取一行json并从每一行中提取密钥。最终,这将从 ES 的索引中删除。

但是,在读取文件时,提取的值为:b'74298dcbd08507175b94fbe5c2a6a87d'而不是74298dcbd08507175b94fbe5c2a6a87d.读取行(从文件)的代码是:

from elasticsearch import Elasticsearch, helpers
import json
es = Elasticsearch("a.b.c.d:9200")
delete_patch_destination = "delete.json"
index_name = "some_index"
with open(delete_patch_destination) as delete_json_file:
for line in delete_json_file:
# print(line)
line_content = json.loads(line)
# line_content = json.loads(line)
# for es_key in line_content.items():
for es_key in line_content.keys():
print (es_key)
# es.delete(index=index_name, doc_type="latest",id=es_key)

json 文件由以下行组成:

{"b'af2f9719a205f0ce9ae27c951e5b7037'": ""b'af2f9719a205f0ce9ae27c951e5b7037'""}
{"b'2b2781de47c70b11576a0f67bc59050a'": ""b'2b2781de47c70b11576a0f67bc59050a'""}
{"b'6cf97818c6b5c5a94b7d8dbb4cfcfe60'": ""b'6cf97818c6b5c5a94b7d8dbb4cfcfe60'""}
{"b'ceaf66243d3eb226859ee5ae7eacf86a'": ""b'ceaf66243d3eb226859ee5ae7eacf86a'""}
{"b'164a12ea5947e1f51566ee6939e20a2e'": ""b'164a12ea5947e1f51566ee6939e20a2e'""}
{"b'42e9bb704c424b49fb5e6adb68157e6f'": ""b'42e9bb704c424b49fb5e6adb68157e6f'""}

可以改进输入以避免这些卷积,但要解决您的直接问题:

您的字典似乎由一个键和与 value 相同的数据组成(更"字符串化",我们将忽略该部分)

首先使用ast.literal_eval进行评估,然后解码要转换为字符串的键:

>>> import ast
>>> s = "b'af2f9719a205f0ce9ae27c951e5b7037'"
>>> ast.literal_eval(s).decode()
'af2f9719a205f0ce9ae27c951e5b7037'

(与eval相反,这种评估方法没有安全问题:使用 python 的 eval() 与 ast.literal_eval()?)

解码字符串,如下所示:

如何在 Python3 中将"二进制字符串"转换为普通字符串?

b'a_string'.decode('utf-8')

你会得到"a_string">

相关内容

  • 没有找到相关文章

最新更新