目标:
json
或csv
文件,并且必须返回json return json.load(fileObject)
上使用try catch技巧 问题:
可以将json
文件作为输入正常工作,但对于csv
,它显示空数组
任何更好的方法??
CSV文件:
Alpha,Beta,Gamma
1,2,3
JSON文件:
[
{
"Alpha": 1,
"Beta": 2,
"Gamma": 3
}
]
代码:
import csv
import json
def read_input_File(file_path):
try:
fileObject = open(file_path, 'rU')
# check if it is json
try:
return json.load(fileObject)
except:
# it is csv then
reader = csv.DictReader(fileObject)
# Parse the CSV into JSON
out = json.dumps([row for row in reader])
return out
except IOError as e:
raise SystemExit("I/O error(%s): %s", e.errno, e.strerror)
finally:
fileObject.close()
答案 0 :(得分:3)
我猜想json.load()
调用已占用了文件。也许在fileObject.seek(0)
通话之前尝试csv.DictReader()
?
答案 1 :(得分:1)
我认为不必使用try catch块。为了便于阅读,我将使用if else语句。
import json
import csv
def read_input_File(file_path):
if file_path.endswith(".json"): return json.load(open(file_path,"r"))
elif file_path.endswith(".csv"): return json.dumps(list(csv.DictReader(open("prova.csv"))))
else: raise ValueError("The file is not json nor cvs")