【问题标题】:python csv to json using column as keypython csv到json使用列作为键
【发布时间】:2016-04-19 12:20:13
【问题描述】:

我需要帮助,我不想打印 CSV 文件的标题。

csvfile = open('testdata.csv', 'rU')
jsonfile = open('brofile.json', 'w')

fieldnames = {'Matric':[("studentName","dept","status")]}

reader = csv.DictReader( csvfile, fieldnames)

for row in reader:
    json.dump(row, jsonfile)
    jsonfile.write('\n')

预期输出

[2010CS01: { "Jones Doe", "Computer science", "paid"}]
[2010CS02: {"James Rug", "Computer Science", "Paid"}]
[2010AC01: {"Curtis Payne", "Accounting", "unpaid"}]

CSV 文件:

Matric         Name            Department            Status
2010CS01       Jones Doe       Computer Science      Paid 
2010CS02       James Rug       Computer Science      Paid 
2010AC01       Curtis Payne    Accounting            Unpaid 

【问题讨论】:

  • 我投票结束这个问题作为题外话,因为 SO 不是代码编写服务
  • 然后?你试过什么?
  • 预期的输出不是有效的 JSON。

标签: python json csv


【解决方案1】:

您可以使用csvfile.readline() 读取文件中的第一行,然后再将其提供给 csv-reader。这会将文件描述符推进到第二行(您可以使用csvfile.tell() 检查位置),因此应该省略输出中的标题。

csvfile.readline()
reader = csv.DictReader(csvfile, fieldnames)

更新:

正如我的评论中提到的,您的输入数据有一个问题:没有明显的分隔符来标记列之间的边界(至少在您发布的数据中 - 只有空格)。如果使用逗号作为分隔符,一切顺利:

数据:

Matric,Name,Department,Status
2010CS01,Jones Doe,Computer Science,Paid
2010CS02,James Rug,Computer Science,Paid
2010AC01,Curtis Payne,Accounting,Unpaid

代码:

import csv, json

csvfile = open('testdata.csv', 'rU')
jsonfile = open('testdata.json', 'w')

reader = csv.DictReader(csvfile)

for row in reader:
    json.dump({ row['Matric'] : (row['Name'], row['Department'], row['Status']) }, jsonfile)
    jsonfile.write('\n')

输出:

{"2010CS01": ["Jones Doe", "Computer Science", "Paid"]}
{"2010CS02": ["James Rug", "Computer Science", "Paid"]}
{"2010AC01": ["Curtis Payne", "Accounting", "Unpaid"]}

像其他 cmets 所述,您的预期输出不是有效的 JSon。这个输出是。

转换输入数据

假设您的输入数据实际上是由制表符分隔的,当您在此处发布它们时已将它们转换为空格,您可以在解析 csv 时简单地指定制表符作为分隔符:

reader = csv.DictReader(csvfile, delimiter='\t')

如果您的输入数据确实只有空格,您可以使用简单的 sed 将多个空格转换为逗号:

sed -e 's/\ \{2,\}/,/g' -i testdata.csv

不保证这会起作用 - 如果您的数据字段中有多个空格,它会搞砸的。

【讨论】:

  • 有同样的东西..它没有给我我想要的实际格式。
  • 我明白了...尝试自己运行它,标题被剥离,但是由于输入错误,您得到了错误的输出。您正在解析一个 csv(逗号分隔值),它实际上不包含逗号。您需要指定一个分隔符,用于分隔单个列。您的输入数据是包含制表符还是全是空格?
  • 非常感谢...非常感谢。你为我的发展做出了贡献。你会得到祝福
【解决方案2】:

若要忽略 csv 文件的第一行,请在 reader 上调用 next()

reader = next(reader, None) 

【讨论】:

  • 谢谢,但这并不能解决问题。格式还是不规则
  • 如之前的评论中所说,您的预期输出不是有效的 json。你说的格式仍然不规则是什么意思?你说你不想打印标题,我给出的代码就是这样做的。编辑您的问题或提出其他问题
  • 谢谢我已经安排好了。我很感激
猜你喜欢
  • 2017-07-29
  • 2019-04-09
  • 2018-11-20
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 2021-07-11
相关资源
最近更新 更多