【发布时间】:2021-11-16 05:40:20
【问题描述】:
这似乎是一个简单的问题,但在 Stack 社区中找不到。我在文本文件中有一个如下所示的数据集。我想将它作为一个列表读入,每个值都是一个浮点数。目前,所需的简单列表中的输出非常奇怪(也在下面)。
数据.txt:
[1130.1271455966723, 1363.3947962724474, 784.433380329118, 847.2140341725295, 803.0276763894814,..]
尝试的代码:
my_file = open(r"data.txt", "r")
content = my_file.read()
content_list = content.split(",")
my_file.close()
输出是奇数。值是列表中的字符串和列表以及添加的空格:
当前结果:
['[1130.1271455966723',
' 1363.3947962724474',
' 784.433380329118',
' 847.2140341725295',
' 803.0276763894814',
' 913.7751118925291',
' 1055.3775618432019',...]']
我也用下面的代码尝试了这里的方法 (How to convert string representation of list to a list?) 但产生了错误:
import ast
x = ast.literal_eval(result)
raise ValueError('malformed node or string: ' + repr(node))
ValueError: malformed node or string: ['[1130.1271455966723', '1363.3947962724474', ' 784.433380329118', ' 847.2140341725295', ' 803.0276763894814',...]']
理想结果:
list = [1130.1271455966723, 1363.3947962724474, 784.433380329118, 847.2140341725295, 803.0276763894814]
【问题讨论】:
-
为什么一开始就这样存储?请注意,它碰巧 是有效的 JSON,因此您可以将其视为 JSON。但是您应该使用 JSON 或
pickle之类的东西来序列化您的数据。不要只是将字符串表示形式转储到文件中。 -
当文件中的项目用逗号和空格分隔时,您只是用逗号分隔。你也没有去掉括号。而且您不会将每个项目转换为浮点数。因此,您必须忽略括号,拆分正确的内容,并将每个项目转换为浮点数。网上有很多关于如何做这些事情的资源。然而,首先以这种方式存储它是不必要的。如果您将每个浮点数存储在文本文件中自己的行上,没有逗号或括号,那将大大简化事情。
-
注意,一般而言对于
some_object,如果您使用file.write(str(some_object)),则无法保证您实际上可以从您创建的文本