我是python的新手。我有一个txt文件,其中包含3D模型的输入数据:
...
# comments
rfk = [1e-5, 1e-7, 1e-1]
rsig = [0.0005]
# comments
lengths = [[13,13,1.6],[13,13,1.6],[13,13,1.6]]
...
我想提取数据进行进一步处理的最佳方法是将它们保存到字典中 - 如下所示:
data1 = {rfk:[1e-5, 1e-7, 1e-1], rsig:[0.0005], lengths:[[13,13,1.6],[13,13,1.6],[13,13,1.6]]}
我现在正在努力阅读文件并保存数据(通过忽略评论),就像在我的例子中作为词典一样。我从文件中读取数据的方法是这样的:
for line in open("myfile.txt"):
li=line.strip()
if not li.startswith("#"):
# what to do here?
答案 0 :(得分:0)
我们可以使用ast.literal_eval
来评估Python对象的右侧
from ast import literal_eval
with open('myfile.txt') as file:
d = {}
for line in file:
line = line.strip()
if not line.startswith('#'):
key, value = map(str.strip, line.split('='))
d[key] = literal_eval(value)
对于您的示例数据,d
则为
{'rfk': [1e-05, 1e-07, 0.1], 'rsig': [0.0005], 'lengths': [[13, 13, 1.6], [13, 13, 1.6], [13, 13, 1.6]]}
答案 1 :(得分:0)
您可以使用字符串方法partition
*将数据分隔为词典的键和值,
字符串方法strip
用于清除前导和尾随空格中的键字符串
然后是内置函数eval
从值#string中提取pythonic对象,如下所示:
with open('myfile.txt') as file:
d = {}
for line in file:
line = line.strip()
if not line.startswith('#'):
key, _ ,value = line.partition('=')
d[key.strip()] = eval(value)
* partition
在分隔符的第一次出现时拆分字符串
(在这种情况下,' =')
并返回list
[前导字符串,分隔符,后跟字符串]
答案 2 :(得分:0)
您可以将at视为json并添加一些安全检查:
data
您的示例{'lengths': [[13, 13, 1.6], [13, 13, 1.6], [13, 13, 1.6]],
'rfk': [1e-05, 1e-07, 0.1],
'rsig': [0.0005]}
包含:
ocsigenserver