【发布时间】:2019-02-19 06:23:54
【问题描述】:
我有很多想要阅读的 .txt 文件。 通过将 python 字典转换为字符串并将字符串保存在 .txt 文件中来保存 .txt 文件。
param_string = str(parameters-as-dict)
text_file = open(parameter_file_path, "w")
text_file.write(param_string)
text_file.close()
dict 的条目是混合类型(float、int、string、...)。在某些文件中,dict 的一个条目是一个 numpy 数组,并保存在 txt 文件中
'epsilons': array([...])
因为我想通过名称访问保存在字典中的值,所以我现在想读取 txt 文件并再次将它们作为字典加载。这很容易与
f = open(path, 'r')
parameters = ast.literal_eval(f.read())
只要文件中没有 numpy 数组。当 numpy-array 存在时,我收到错误:
文件“.../python3.6/ast.py”,第 84 行,在 _convert raise ValueError('malformed node or string: ' + repr(node)) ValueError: malformed node or string: <_ast.call object at>
这是有道理的,看看 as.literal_eval 文档 (https://docs.python.org/2/library/ast.html) 说
安全地评估表达式节点或 Unicode 或 Latin-1 编码 包含 Python 文字或容器显示的字符串。字符串或 提供的节点只能由以下 Python 文字组成 结构:字符串、数字、元组、列表、字典、布尔值和 没有。
由于我无法以不同的方式重新保存文件,我不知道数组在哪个位置,并且我想避免繁琐的正则表达式解析,我正在寻找一种解决方案,将我的 txt 文件转换为包含一个 numpy 数组。
编辑: 问题不仅在于 numpy 数组,还在于我保存了一个对象时,例如一个特定的类:
, 'foo' : <class bar>,
一种解决方案,其中所有无法解析为某种数字/布尔/某种已知数据类型的内容都会自动保存为字符串,就像它可以满足我的需求一样。
【问题讨论】:
-
您是否检查过用于从文本文件中读取数据的 numpy 方法。那里有很多选择,这可能很容易解决您的问题。不过,我不熟悉 numpy。你也试过这个吗:docs.scipy.org/doc/numpy/reference/generated/…。这应该与 try: 和 except: 解决方案一起使用。
-
我将编辑文件(或读取字符串)以删除“数组”字样。然后数组应该作为列表加载。
-
另一种选择是迭代方法,
try/except捕获那些ValueError并适当地处理它们,即paramters['epsilons']= array([1,2,3])应该可以工作。 -
@DavidZemens 我认为这种方法值得作为它自己的答案
-
您希望从
<class bar>得到什么回报?是类的实例,还是类本身?