我需要帮助,我不想从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
答案 0 :(得分:1)
要忽略您的next()
上csv文件的第一行,请致电reader
:
reader = next(reader, None)
答案 1 :(得分:0)
在将文件提供给csv-reader之前,您可以使用csvfile.readline()
读取文件中的第一行。这会将文件描述符前进到第二行(您可以使用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"]}
与所述的其他评论一样,您的预期输出无效JSon。这个输出是。
假设您的输入数据实际上是由制表符分隔的,当您在此处发布时,这些制表符已转换为空格,您可以在解析csv时将制表符指定为分隔符:
reader = csv.DictReader(csvfile, delimiter='\t')
如果您的输入数据确实只有空格,您可以使用简单的sed将多个空格转换为逗号:
sed -e 's/\ \{2,\}/,/g' -i testdata.csv
不保证这会有效 - 如果您的数据字段中有多个空格,那么它会搞砸。