在python中使用json将数字格式化为float或int
我有一个包含数据的CSV文件-在python中使用json将数字格式化为float或int,python,json,csv,Python,Json,Csv,我有一个包含数据的CSV文件- Time,site_name,cell_name,RRC_attempts,rrc_succ_rate 2018-01-12T08:37:00-06:00,910536_ARPIN,910536-24,1,100.0 2018-01-12T08:37:00-06:00,910536_ARPIN,910536-34,0,0.0 2018-01-12T08:37:00-06:00,910536_ARPIN,910536-14,5,100.0 我正在使用pyt
Time,site_name,cell_name,RRC_attempts,rrc_succ_rate
2018-01-12T08:37:00-06:00,910536_ARPIN,910536-24,1,100.0
2018-01-12T08:37:00-06:00,910536_ARPIN,910536-34,0,0.0
2018-01-12T08:37:00-06:00,910536_ARPIN,910536-14,5,100.0
我正在使用python中的json模块将此csv转换为json
import json
import csv
csvfile_ind = open("test.csv",'r')
reader_ind = csv.DictReader(csvfile_ind)
json_file_ind = open("test_json.json", 'w')
for row in reader_ind:
json_file_ind.write(json.dumps(row,sort_keys=False, indent=4, separators=(',', ': ')))
我目前的输出是-
[
{
"Time": "2018-01-12T08:37:00-06:00",
"site_name": "910536_ARPIN",
"cell_name": "910536-24",
"RRC_attempts": "1",
"rrc_succ_rate": "100.0"
},
{
"Time": "2018-01-12T08:37:00-06:00",
"site_name": "910536_ARPIN",
"cell_name": "910536-34",
"RRC_attempts": "0",
"rrc_succ_rate": "0.0"
},
{
"Time": "2018-01-12T08:37:00-06:00",
"site_name": "910536_ARPIN",
"cell_name": "910536-14",
"RRC_attempts": "5",
"rrc_succ_rate": "100.0"
}
]
[
{
"Time": "2018-01-12T08:37:00-06:00",
"site_name": "910536_ARPIN",
"cell_name": "910536-24",
"RRC_attempts": 1,
"rrc_succ_rate": 100
},
{
"Time": "2018-01-12T08:37:00-06:00",
"site_name": "910536_ARPIN",
"cell_name": "910536-34",
"RRC_attempts": 0,
"rrc_succ_rate": 0
},
{
"Time": "2018-01-12T08:37:00-06:00",
"site_name": "910536_ARPIN",
"cell_name": "910536-14",
"RRC_attempts": 5,
"rrc_succ_rate": 100
}
]
我期望的输出是-
[
{
"Time": "2018-01-12T08:37:00-06:00",
"site_name": "910536_ARPIN",
"cell_name": "910536-24",
"RRC_attempts": "1",
"rrc_succ_rate": "100.0"
},
{
"Time": "2018-01-12T08:37:00-06:00",
"site_name": "910536_ARPIN",
"cell_name": "910536-34",
"RRC_attempts": "0",
"rrc_succ_rate": "0.0"
},
{
"Time": "2018-01-12T08:37:00-06:00",
"site_name": "910536_ARPIN",
"cell_name": "910536-14",
"RRC_attempts": "5",
"rrc_succ_rate": "100.0"
}
]
[
{
"Time": "2018-01-12T08:37:00-06:00",
"site_name": "910536_ARPIN",
"cell_name": "910536-24",
"RRC_attempts": 1,
"rrc_succ_rate": 100
},
{
"Time": "2018-01-12T08:37:00-06:00",
"site_name": "910536_ARPIN",
"cell_name": "910536-34",
"RRC_attempts": 0,
"rrc_succ_rate": 0
},
{
"Time": "2018-01-12T08:37:00-06:00",
"site_name": "910536_ARPIN",
"cell_name": "910536-14",
"RRC_attempts": 5,
"rrc_succ_rate": 100
}
]
如何告诉json将数字解析为int或float而不是字符串?请告知。
注意-在编写我的CSV文件时,我使用int()或float()显式地将我的值转换为int或float。自己解析CSV,当创建字典Parse
int()
和float()
时,如果需要,输出到json:
import json
with open("test.csv",'r') as f:
# read lines, strip newlines, split at ,
lines = [ x.strip('\n').split(',') for x in f.readlines()]
listDic = []
for lineIndex in range(1,len(lines)):
row = lines[lineIndex] # get data row
row[3] = int(row[3]) # convert data
row[4] = float(row[4]) # convert data
# zip to tuples of (key,value) and append to result list of dicts
listDic.append( dict( zip(lines[0],row)))
with open("test_json.json", 'w') as json_file_ind:
for row in listDic:
json_file_ind.write(json.dumps(row,sort_keys=False,
indent=4, separators=(',', ': ')))
输出:(由json\u file\u ind
-调用创建的文件内容)
不要将每一行作为对
json.dumps()
的单独调用写入。将所有行收集到一个列表中,并一次性转储所有行
要将字符串字段转换为整数,请在dict
中对这些条目调用int()
import json
import csv
with csvfile_ind = open("test.csv",'r'):
reader_ind = csv.DictReader(csvfile_ind)
rows = []
for row in reader_ind:
row["RRC_attempts"] = int(row["RRC_attempts"])
row["rrc_succ_rate"] = int(row["rrc_succ_rate"])
rows.append(row)
with json_file_ind = open("test_json.json", 'w'):
json.dump(rows, json_file_ind, sort_keys=False, indent=4, separators=(',', ': '))
这里有一种方法,您不必事先知道哪些值是数值:
import json
import csv
def numerify(row):
for k, v in list(row.items()):
try:
row[k] = float(v)
row[k] = int(v)
except ValueError:
pass
csvfile_ind = open("test.csv",'r')
reader_ind = csv.DictReader(csvfile_ind)
json_file_ind = open("test_json.json", 'w')
for row in reader_ind:
numerify(row)
json_file_ind.write(json.dumps(row,sort_keys=False, indent=4, separators=(',', ': ')))
如果您希望整数作为整数,浮动作为浮动,您可以按如下方式调整Robs代码:
def numerify(row):
for k, v in list(row.items()):
try:
row[k] = int(v)
except ValueError:
try:
row[k] = float(v)
except ValueError:
pass
您当前或所需的输出都不是有效的json。请使用有效的json修改问题。除非您可以更改CSV格式以引用非数字字段,您需要在从CSV读取和写入JSON之间显式转换适当的数据。您无法从代码中获取第一个文件。如何处理可以包含字符串、整数、日期或浮点的列,并且希望每个列的格式正确?在我的例子中,我有两列,一列表示key,另一列表示attribute。我能够处理整数,但无法处理浮点。看到我的帖子了吗