带有变量和数据类型的python配置文件

时间:2017-12-01 09:14:50

标签: python json config

我想在json配置文件中提供变量名称及其数据类型,系统将使用它们进行进一步处理,如

myconfig.json

{
   header:{
        field1:int,
        field2:long,
        field3:float,
        field4:string
    }
}

当从输入文件/源读取数据时,另一个程序将读取此配置,并将使用此标头和数据类型映射输入记录,如果需要,还将进行转换。

例如,

如果我有输入文件,

3,10,3.5,abc
3,010,3,bcd

我想用上面的头模式解析这个文件,并验证和转换这些字段的数据类型。这个输出将是json并将被送到另一个系统。第二行中的010应转换为10(因为json.loads失败),3应转换为float 3.0等。

我尝试过使用ini和conf文件,但未能达到上述目的。任何人都可以帮我实现上述行为吗?

2 个答案:

答案 0 :(得分:0)

您可以使用以下代码:

import re
import json
f=open('f.csv','r')


alllines=f.readlines()
a={}
for line in alllines:
    b={}
    temp=re.sub(' +',' ',line) #delete extra space in one line
    temp=temp.strip().split(',') #split using space
    b.update({'field1':int(temp[0])})
    b.update({'field2':int(temp[1])})
    b.update({'field3':float(temp[2])})
    b.update({'field4':str(temp[3])})
    a.update({'header'+str(alllines.index(line)):b})


outfile=open('x.json','w')
json.dump(a,outfile)

答案 1 :(得分:0)

这是使用pandas,json和(numpy)的解决方案:

import pandas as pd
import json
import numpy as np

# Create a file (csv) for test purposes 
data = '''\
3,10,3.5,abc
3,010,3,bcd'''
file = io.StringIO(data)

# Create a file (json) for test purposes
json_data = '''\
{
   "header":[
       ["field1","int16"],
       ["field2","float32"],
       ["field3","float64"],
       ["field4","str"]]
}'''

# Load json to dictionary
json_d = json.loads(json_data)

# Fetch field names and dtypes
names = [i[0] for i in json_d['header']]
dtype = dict(json_d['header'])

# Now use pandas to read the whole thing to a dataframe
df = pd.read_csv(file,header=None,names=names,dtype=dtype)

# Output as dict (this can be passed to a json file with json.dump())
df.to_dict('r')

结果:

[{'field1': 3, 'field2': 10.0, 'field3': 3.5, 'field4': 'abc'},
 {'field1': 3, 'field2': 10.0, 'field3': 3.0, 'field4': 'bcd'}]