我想在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文件,但未能达到上述目的。任何人都可以帮我实现上述行为吗?
答案 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'}]