我想从文本文件中读取一个字典,它看起来像这样{'key': [1, ord('@')]}
。我了解过eval()
和literal_eval()
,但由于ord()
的原因,两者都无法使用。
我还尝试了json.loads
和json.dumps
,但没有得到积极的结果。
还有哪些其他方法可以使用?
我想从文本文件中读取一个字典,它看起来像这样{'key': [1, ord('@')]}
。我了解过eval()
和literal_eval()
,但由于ord()
的原因,两者都无法使用。
我还尝试了json.loads
和json.dumps
,但没有得到积极的结果。
还有哪些其他方法可以使用?
open
将文本文件作为字符串读入,而不是使用json.loads
,则可以进行一些简单的正则表达式搜索以查找括号内的内容,例如ord('@')
-> @
。ord_
的输出列表中。为了测试这个例子,myfile.txt
是一个包含以下内容的文本文件。import json
import re
with open(r"myfile.txt") as f:
json_ = "".join([line.rstrip("\n") for line in f])
rgx = re.compile(r"ord\(([^\)]+)\)")
rgd = rgx.findall(json_)
ord_ = [ord(str_.replace(r"'", "")) for str_ in rgd]
json.dump()
和json.load()
无法工作,因为ord()
不是JSON可序列化的(这意味着该函数不能成为JSON对象)。eval
确实是非常糟糕的做法,我永远不会建议任何人在任何情况下使用它。我能想到的最好的解决方法是使用条件和额外的列表。
# data.json = {'key': [1, ['ord', '@']]} # first one is function name, second is arg
with open("data.json") as f:
data = json.load(f)
# data['key'][1][0] is "ord"
if data['key'][1][0] == "ord":
res = ord(data['key'][1][1])
json.dump
。 - flakesord()
,那么您可以轻松地将它们替换为相应的数值,然后使用“ast.literal_eval()”函数。 - jasonharpereval
可以工作,类似于eval(file.read())
。但是为什么一开始就是一个文本文件呢?这只是 Python 源代码。 - juanpa.arrivillaga