Python和CSV:从CSV读取JSON

2024-10-04 09:29:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,从一个CSV文件读取和转储的内容到一个文件的选择。这个csv文件的内容是一个列,其中每行包含一系列类似这样的JSON对象(用jsonlint验证):

 [{"className": "Merchant", "__type": "Pointer", "objectId": "S8IGOwBn8Y"}, {"className": "Merchant", "__type": "Pointer", "objectId": "psNnxwFVmv"}, {"className": "Merchant", "__type": "Pointer", "objectId": "IHcC9ikKBJ"}, {"className": "Merchant", "__type": "Pointer", "objectId": "RVprbh5nWx"}, {"className": "Merchant", "__type": "Pointer", "objectId": "47Zjn9RRov"}, {"className": "Merchant", "__type": "Pointer", "objectId": "CoGtlmGzyo"}, {"className": "Merchant", "__type": "Pointer", "objectId": "yJHn9dBCIT"}, {"className": "Merchant", "__type": "Pointer", "objectId": "nEOY9RPRD4"}]

把这个概念化一点,这就是我想要的:

csv file ---> function that I wrote ---> something.json

在这种情况下,我用测试.csv作为输入和测试.txt作为输出。对于第一个json流,它似乎工作得很好,但有一个怪癖:

第一个JSON对象很好地显示出来:

[

{"className": "Merchant", "__type": "Pointer", "objectId": "S8IGOwBn8Y"}, 
{"className": "Merchant", "__type": "Pointer", "objectId": "psNnxwFVmv"}, 
{"className": "Merchant", "__type": "Pointer", "objectId": "IHcC9ikKBJ"}],

但在那之后,他们开始像这样出现:

"[{""className"": ""Merchant"", ""__type"": ""Pointer"", ""objectId"": ""S8IGOwBn8Y""}, 
{""className"": ""Merchant"", ""__type"": ""Pointer"", ""objectId"":  ""psNnxwFVmv""}, 
{""className"": ""Merchant"", ""__type"": ""Pointer"", ""objectId"": ""IHcC9ikKBJ""}, 
{""className"": ""Merchant"", ""__type"": ""Pointer"", ""objectId"": ""RVprbh5nWx""}, 
{""className"": ""Merchant"", ""__type"": ""Pointer"", ""objectId"": ""47Zjn9RRov""}, 
{""className"": ""Merchant"", ""__type"": ""Pointer"", ""objectId"": ""CoGtlmGzyo""}, 
{""className"": ""Merchant"", ""__type"": ""Pointer"", ""objectId"": ""yJHn9dBCIT""}, 
 {""className"": ""Merchant"", ""__type"": ""Pointer"", ""objectId"": ""nEOY9RPRD4""}', 
'\n[{""className"": ""Merchant"", ""__type"": ""Pointer"", ""objectId"": ""tNgLB9dobR""}, 

下面是执行此操作的函数:

def read_csv(thefile):

    f = open('test.txt','w')
    with open(thefile, 'rb') as csvfile:

        #based on python documentation
        spamreader = csv.reader(csvfile, delimiter=']')
        for row in spamreader:
            f.write(str(row))

    f.close()

两个问题:

  1. 如何确保输出一致?换句话说,如何消除“”和换行符,以便所有JSON都有效?这和我加的NLSPARAM有关吗?

  2. 最后,我不想转储到.txt文件,而是转储到.json文件。如何做到这一点?

感谢所有回复!你知道吗


Tags: 文件csv函数txtjson内容typemerchant
1条回答
网友
1楼 · 发布于 2024-10-04 09:29:59

我猜-未经测试-:

import json
with open('test.txt','r') as input_file:
    with open('output.json','wb') as output_file:
        for row in input_file.readlines():
            output_file.write(json.loads(row))

在任何情况下,使用这个库都会对您有很大帮助:https://docs.python.org/2/library/json.html

相关问题 更多 >