读取txt文件数据作为字典

时间:2018-02-07 14:45:22

标签: python python-3.x dictionary

我是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?

3 个答案:

答案 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