目的:
json
或csv
文件并且必须返回jsonreturn 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()
我猜测json.load()
调用消耗了文件。也许在fileObject.seek(0)
召唤之前尝试csv.DictReader()
?
我不认为使用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")