Python将文件自动检测为csv或json并读取

时间:2019-04-15 08:13:30

标签: python python-3.x

目标:

  1. Python 3函数应该能够读取jsoncsv文件,并且必须返回json
  2. AutoDetect格式,我在return json.load(fileObject)上使用try catch技巧
  3. 具有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()

2 个答案:

答案 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")