第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

將 csv 文件轉(zhuǎn)換為 json,浮點(diǎn)值周圍沒有引號(hào)

將 csv 文件轉(zhuǎn)換為 json,浮點(diǎn)值周圍沒有引號(hào)

慕尼黑8549860 2021-11-02 15:01:06
我有一些需要轉(zhuǎn)換為 json 的 csv 文件。csv 中的一些浮點(diǎn)值是數(shù)字字符串(以保持尾隨零)。轉(zhuǎn)換為 json 時(shí),所有鍵和值都用雙引號(hào)括起來。我需要數(shù)字字符串浮點(diǎn)值沒有引號(hào),但保留尾隨零。這是輸入 csv 文件的示例:ACCOUNTNAMEDENORM,DELINQUENCYSTATUS,RETIRED,INVOICEDAYOFWEEK,ID,BEANVERSION,ACCOUNTTYPE,ORGANIZATIONTYPEDENORM,HIDDENTACCOUNTCONTAINERID,NEWPOLICYPAYMENTDISTRIBUTABLE,ACCOUNTNUMBER,PAYMENTMETHOD,INVOICEDELIVERYTYPE,DISTRIBUTIONLIMITTYPE,CLOSEDATE,FIRSTTWICEPERMTHINVOICEDOM,HELDFORINVOICESENDING,FEINDENORM,COLLECTING,ACCOUNTNUMBERDENORM,CHARGEHELD,PUBLICIDJohn Smith,2.0000000000,0.0000000000,5.0000000000,1234567.0000000000,69.0000000000,1.0000000000,,4321987.0000000000,1,000-000-000-00,10012.0000000000,10002.0000000000,3.0000000000,,1.0000000000,0,,0,000-000-000-00,0,bc:1234346我得到的 json 輸出是:{"ACCOUNTNAMEDENORM":"John Smith","DELINQUENCYSTATUS":"2.0000000000","RETIRED":"0.0000000000","INVOICEDAYOFWEEK":"5.0000000000","ID":"1234567.0000000000","BEANVERSION":"69.0000000000","ACCOUNTTYPE":"1.0000000000","ORGANIZATIONTYPEDENORM":null,"HIDDENTACCOUNTCONTAINERID":"4321987.0000000000","NEWPOLICYPAYMENTDISTRIBUTABLE":"1","ACCOUNTNUMBER":"000-000-000-00","PAYMENTMETHOD":"12345.0000000000","INVOICEDELIVERYTYPE":"98765.0000000000","DISTRIBUTIONLIMITTYPE":"3.0000000000","CLOSEDATE":null,"FIRSTTWICEPERMTHINVOICEDOM":"1.0000000000","HELDFORINVOICESENDING":"0","FEINDENORM":null,"COLLECTING":"0","ACCOUNTNUMBERDENORM":"000-000-000-00","CHARGEHELD":"0","PUBLICID":"xx:1234346"}這是我正在使用的代碼:import csvimport jsoncsvfile = open('output2.csv', 'r')jsonfile = open('output2.json', 'w')readHeaders = csv.reader(csvfile)fieldnames = next(readHeaders)reader = csv.DictReader(csvfile, fieldnames)for row in reader:    json.dump(row, jsonfile, separators=(',', ':'))    jsonfile.write('\n')
查看完整描述

3 回答

?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超2個(gè)贊

現(xiàn)在,根據(jù)您的評(píng)論,我更好地理解您的問題,這是一個(gè)完全不同的答案。請(qǐng)注意,它不使用json模塊,只是“手動(dòng)”進(jìn)行所需的處理。雖然它可能可以使用該模塊來完成,但與下面使用的相對(duì)簡(jiǎn)單的邏輯相比,讓它以不同的方式格式化默認(rèn)情況下識(shí)別的 Python 數(shù)據(jù)類型可能相當(dāng)復(fù)雜——我從經(jīng)驗(yàn)中知道——。


花藥注釋:與您的代碼一樣,這會(huì)將 csv 文件的每一行轉(zhuǎn)換為有效的 JSON 對(duì)象,并將每一行寫入文件中的單獨(dú)行。然而,結(jié)果文件的內(nèi)容在技術(shù)上不會(huì)是有效的 JSON,因?yàn)樗羞@些單獨(dú)的對(duì)象都需要用逗號(hào)分隔并括在[ ]括號(hào)中(即,從而成為有效的 JSON“數(shù)組”對(duì)象)。


import csv


with open('output2.csv', 'r', newline='') as csvfile, \

     open('output2.json', 'w') as jsonfile:


    for row in csv.DictReader(csvfile):

        newfmt = []

        for field, value in row.items():

            field = '"{}"'.format(field)

            try:

                float(value)

            except ValueError:

                value = 'null' if value == '' else '"{}"'.format(value)

            else:

                # Avoid changing integer values to float.

                try:

                    int(value)

                except ValueError:

                    pass

                else:

                    value = '"{}"'.format(value)


            newfmt.append((field, value))


        json_repr = '{' + ','.join(':'.join(pair) for pair in newfmt) + '}'

        jsonfile.write(json_repr + '\n')

這是寫入文件的 JSON:


{"ACCOUNTNAMEDENORM":"John Smith","DELINQUENCYSTATUS":2.0000000000,"RETIRED":0.0000000000,"INVOICEDAYOFWEEK":5.0000000000,"ID":1234567.0000000000,"BEANVERSION":69.0000000000,"ACCOUNTTYPE":1.0000000000,"ORGANIZATIONTYPEDENORM":null,"HIDDENTACCOUNTCONTAINERID":4321987.0000000000,"NEWPOLICYPAYMENTDISTRIBUTABLE":"1","ACCOUNTNUMBER":"000-000-000-00","PAYMENTMETHOD":12345.0000000000,"INVOICEDELIVERYTYPE":98765.0000000000,"DISTRIBUTIONLIMITTYPE":3.0000000000,"CLOSEDATE":null,"FIRSTTWICEPERMTHINVOICEDOM":1.0000000000,"HELDFORINVOICESENDING":"0","FEINDENORM":null,"COLLECTING":"0","ACCOUNTNUMBERDENORM":"000-000-000-00","CHARGEHELD":"0","PUBLICID":"bc:1234346"}

下面再次顯示添加了空格:


{"ACCOUNTNAMEDENORM": "John Smith",

 "DELINQUENCYSTATUS": 2.0000000000,

 "RETIRED": 0.0000000000,

 "INVOICEDAYOFWEEK": 5.0000000000,

 "ID": 1234567.0000000000,

 "BEANVERSION": 69.0000000000,

 "ACCOUNTTYPE": 1.0000000000,

 "ORGANIZATIONTYPEDENORM": null,

 "HIDDENTACCOUNTCONTAINERID": 4321987.0000000000,

 "NEWPOLICYPAYMENTDISTRIBUTABLE": "1",

 "ACCOUNTNUMBER": "000-000-000-00",

 "PAYMENTMETHOD": 12345.0000000000,

 "INVOICEDELIVERYTYPE": 98765.0000000000,

 "DISTRIBUTIONLIMITTYPE": 3.0000000000,

 "CLOSEDATE": null,

 "FIRSTTWICEPERMTHINVOICEDOM": 1.0000000000,

 "HELDFORINVOICESENDING": "0",

 "FEINDENORM": null,

 "COLLECTING": "0",

 "ACCOUNTNUMBERDENORM": "000-000-000-00",

 "CHARGEHELD": "0",

 "PUBLICID": "bc:1234346"}


查看完整回答
反對(duì) 回復(fù) 2021-11-02
?
皈依舞

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊

哈,真的很有趣,我想和你找到相反的答案,結(jié)果是帶引號(hào)的。

其實(shí)很容易自動(dòng)刪除它,只需刪除參數(shù)“separators=(',',':')”。

對(duì)我來說,只需添加這個(gè)參數(shù)就可以了。


查看完整回答
反對(duì) 回復(fù) 2021-11-02
?
梵蒂岡之花

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個(gè)贊

一種解決方案是使用正則表達(dá)式查看字符串值是否看起來像浮點(diǎn)數(shù),如果是,則將其轉(zhuǎn)換為浮點(diǎn)數(shù)。


import re


null = None

j = {"ACCOUNTNAMEDENORM":"John Smith","DELINQUENCYSTATUS":"2.0000000000",

     "RETIRED":"0.0000000000","INVOICEDAYOFWEEK":"5.0000000000",

     "ID":"1234567.0000000000","BEANVERSION":"69.0000000000",

     "ACCOUNTTYPE":"1.0000000000","ORGANIZATIONTYPEDENORM":null,

     "HIDDENTACCOUNTCONTAINERID":"4321987.0000000000",

     "NEWPOLICYPAYMENTDISTRIBUTABLE":"1","ACCOUNTNUMBER":"000-000-000-00",

     "PAYMENTMETHOD":"12345.0000000000","INVOICEDELIVERYTYPE":"98765.0000000000",

     "DISTRIBUTIONLIMITTYPE":"3.0000000000","CLOSEDATE":null,

     "FIRSTTWICEPERMTHINVOICEDOM":"1.0000000000","HELDFORINVOICESENDING":"0",

     "FEINDENORM":null,"COLLECTING":"0","ACCOUNTNUMBERDENORM":"000-000-000-00",

     "CHARGEHELD":"0","PUBLICID":"xx:1234346"}


for key in j:

    if j[key] is not None:

        if re.match("^\d+?\.\d+?$", j[key]):

            j[key] = float(j[key])

我null = None在這里用來處理出現(xiàn)在 JSON 中的“null”。但是您可以在此處用您正在閱讀的每個(gè) CSV 行替換 'j',然后使用它來更新該行,然后用浮點(diǎn)數(shù)替換字符串將其寫回。


如果您可以將任何數(shù)字字符串轉(zhuǎn)換為浮點(diǎn)數(shù),那么您可以跳過正則表達(dá)式(re.match()命令)并將其替換為j[key].isnumeric(),如果它適用于您的 Python 版本。


編輯:我不認(rèn)為 Python 中的浮點(diǎn)數(shù)以您可能認(rèn)為的方式處理“精度”。它可能看起來像是2.0000000000被“截?cái)唷睘?.0,但我認(rèn)為這更多是格式和顯示問題,而不是丟失信息。考慮以下示例:


>>> float(2.0000000000)

2.0

>>> float(2.00000000001)

2.00000000001

>>> float(1.00) == float(1.000000000)

True

>>> float(3.141) == float(3.140999999)

False

>>> float(3.141) == float(3.1409999999999999)

True

>>> print('%.10f' % 3.14)

3.1400000000

雖然有可能讓 JSON 包含這些零,但在這種情況下,它歸結(jié)為將數(shù)字視為字符串,即格式化的字符串。


查看完整回答
反對(duì) 回復(fù) 2021-11-02
  • 3 回答
  • 0 關(guān)注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)