使用json文件映射CSV

时间:2015-02-01 09:52:27

标签: python json csv python-3.x mapping

我有一个包含3列的csv文件,

Dick,25,Coder
John,23,Architect
Roony,20,Designer
Paras,40,Manager

如何使用python对json映射器解析它,该映射器指出哪一列与第2列一样是Age,3是Occupation? 像 -

这样的东西
[
  "Person","Age", "Job"
]

此外,如果age的值为整数,那将会很棒。 到目前为止,我有以下代码 -

import csv
import json

mapper = open('file.json')
csv_file = 'data.csv'
with open(self.csv_file, 'rb') as csvfile:
        rdr = csv.reader(csvfile, delimiter='\t', quotechar='|')
        j = json.loads(mapper.read())
        for i in range(0, len(rdr)):
            row = rdr[i]
            mapped_r = j[i]

我想要像 -

这样的东西
mapped = CSVMapper.MapObjects('data.csv', 'mapper.json')
print mapped[0].Age == 25 # age of Dick (1st element)

有没有更好的方法来解决问题?

1 个答案:

答案 0 :(得分:1)

我认为https://github.com/samarjeet27/CSV-Mapper/符合您的需求。 使用

安装
pip install csvmapper

浏览回购中的示例。也许你可以在你的情况下以这种方式使用它 -

mapper.json文件 -

[
   [
      { "name" : "Person" },
      { "name" : "Age", "type" : "int" }
      { "name" : "Job" }
   ]
]

您可以将其实现为 -

import csvmapper

mapper = csvmapper.JSONMapper('mapper.json')
parser = csvmapper.CSVParser('data.csv', mapper)

for item in parser.buildObject():
    print item.Job # Job of the item
    print "will be %d after 2 years" %(item.Age+2) # item.Age is an int

希望这有帮助!