Python 从文件中创建参数列表

Python 从文件中创建参数列表,python,list,file,Python,List,File,您好,我正在尝试从文件创建参数列表 最终的结果应该是 参数=[[field]、[units]、[height]、[site]] 问题是信息被分割成几行,一些参数没有全部信息 #info in the file [field1] unit=m/s height=70.4 site=site1 [field2] height=20.6 site=site2 [field3] units=m ... 因此,我希望以这样的方式完成所有字段:如果没有信息,则指定0或“” 示例中的最终结果 param={

您好,我正在尝试从文件创建参数列表

最终的结果应该是

参数=[[field]、[units]、[height]、[site]]

问题是信息被分割成几行,一些参数没有全部信息

#info in the file
[field1]
unit=m/s
height=70.4
site=site1
[field2]
height=20.6
site=site2
[field3]
units=m
...
因此,我希望以这样的方式完成所有字段:如果没有信息,则指定0或“”

示例中的最终结果

param={field1:'m/s',70.4,'site1',field2:'20.6,site2,field3:'m',0','

我知道如何从列表列表创建字典,但不知道如何设置默认值(字符串值为“”,数字值为0),以防缺少某些值


谢谢

您可以使用defaultdict进行分组:

from collections import defaultdict

with open("test.txt") as f:
    d = defaultdict(list)
    for line in map(str.rstrip, f):
        if line.startswith("["):
            d["fields"].append(line.strip("[]"))
        else:
            k,v = line.split("=")
            d[k].append(v)
输入::

[field1]
unit=m/s
height=70.4
site=site1
[field2]
height=20.6
site=site2
[field3]
unit=m
height=6.0
site=site3
输出:

defaultdict(<type 'list'>, {'fields': ['field1', 'field2', 'field3'], 
'site': ['site1', 'site2', 'site3'], 'unit': ['m/s', 'm'],
 'height': ['70.4', '20.6', '6.0']})
{'field2': ['height=20.6', 'site=site2'], 
'field3': ['unit=m', 'height=6.0', 'site=site3'],
 'field1': ['unit=m/s', 'height=70.4', 'site=site1']}
param: 
[['field1', 'field2', 'field3'],
 ['m/s', '', 'm'],
 ['70.4', '20.6', 0],
 ['site1', 'site2', '']]
输出:

defaultdict(<type 'list'>, {'fields': ['field1', 'field2', 'field3'], 
'site': ['site1', 'site2', 'site3'], 'unit': ['m/s', 'm'],
 'height': ['70.4', '20.6', '6.0']})
{'field2': ['height=20.6', 'site=site2'], 
'field3': ['unit=m', 'height=6.0', 'site=site3'],
 'field1': ['unit=m/s', 'height=70.4', 'site=site1']}
param: 
[['field1', 'field2', 'field3'],
 ['m/s', '', 'm'],
 ['70.4', '20.6', 0],
 ['site1', 'site2', '']]

每个
k
都是以
[
开头的一行,然后我们调用grouper对象上的next,以获取到以
[
开头的下一行的所有行,或者EOF:

这将填充缺少的信息

f= open('file.txt','r')     
field, units, height, site =  [],[],[],[]
param = [ field, units, height, site]

lines = f.readlines()

i=0
while True:
    try:
        line1 = lines[i].rstrip()
        if line1.startswith('['):
            field.append(line1.strip('[]'))
        else:
            field.append(0)
            i-= 1
    except:
        field.append(0)    

    try:
        line2 = lines[i+1].rstrip()
        if line2.startswith('unit') or line2.startswith('units'):
            units.append(line2.split('=')[-1])
        else:
            units.append('')
            i-=1
    except:
        units.append('')

    try:
        line3 = lines[i+2].rstrip()
        if line3.startswith('height'):
            height.append(line3.split('=')[-1])
        else:
            height.append(0)
            i-=1
    except:
        height.append(0)    

    try:
        line4 = lines[i+3].rstrip()
        if line4.startswith('site'):
            site.append(line4.split('=')[-1])
        else:
            site.append('')                       
    except:
        site.append('')
        break

    i +=4
输出:

defaultdict(<type 'list'>, {'fields': ['field1', 'field2', 'field3'], 
'site': ['site1', 'site2', 'site3'], 'unit': ['m/s', 'm'],
 'height': ['70.4', '20.6', '6.0']})
{'field2': ['height=20.6', 'site=site2'], 
'field3': ['unit=m', 'height=6.0', 'site=site3'],
 'field1': ['unit=m/s', 'height=70.4', 'site=site1']}
param: 
[['field1', 'field2', 'field3'],
 ['m/s', '', 'm'],
 ['70.4', '20.6', 0],
 ['site1', 'site2', '']]

也许会有帮助。所以它们的字段数不尽相同?每个字段可能都有单位、高度和位置。事实上,我应该创建一个带有{field:[unit,height,site]}的字典