我有幾個csv文件,其中每個文件都有不同的格式。這裏是兩個不同的csv文件的示例。請查看格式不是值。在python中解析兩種不同類型的csv格式
csv_2 "xxxx-0147-xxxx-194443,""Jan 1, 2017"",7:43:43 AM PST,,Google fee,,Smart Plan (Calling & Texting),com.yuilop,1,unlimited_usca_tariff_and,mimir,US,TX,76501,USD,-3.00,0.950210,EUR,-2.85"
csv_2 "1305-xxxx-0118-54476..1,""Jan 1, 2017"",7:17:31 AM PST,,Google fee,,Smart Plan (Calling & Texting),com.yuilop,1,unlimited_usca_tariff_and,htc_a13wlpp,US,TX,79079,USD,-3.00,0.950210,EUR,-2.85"
csv_1 GPA.xxxx-2612-xxxx-44448..0,2017-02-01,1485950845,Charged,m1,Freedom Plan (alling & Texting),com.yuilop,subscription,basic_usca_tariff_and,USD,2.99,0.00,2.99,,,07605,US
csv:1 GPA.xxxx-6099-9725-56125,2017-02-01,1485952917,Charged,athene_f,Buy 100 credits (Calling & Texting),com.yuilop,inapp,100_credits,INR,138.41,0.00,138.41,Kolkata,West Bengal,700007,IN
正如你看到csv_2包含「,有時‘’,然而csv_1是一個簡單的格式。我得到的需求所有的CSV和他們有很多和巨大的。我試圖以識別使用嗅探器方言自動但這是不夠的,我不明白的是有一個合理的迴應「」有沒有人誰可以的GUID我如何解決這個問題呢?
Python代碼2.7
With open(file, 'rU') as csvfile:
dialect = csv.Sniffer().sniff(csvfile.read(2024))
csvfile.seek(0)
reader = csv.reader(csvfile, dialect)
for line in reader:
print line
個
參數值:
dialect.escapechar None
dialect.quotechar "
dialect.quoting 0
dialect.escapechar None
dialect.delimiter ,
dialect.doublequote False
結果
csv_1 ['GPA.13xx-xxxx-9725-5xxx', '2017-02-01', '1485952917', 'Charged', 'athene_f', 'Buy 100 credits (Calling & Texting)', 'com.yuilop', 'inapp', '100_credits', 'INR', '138.41', '0.00', '138.41', 'Kolkata', 'West Bengal', '700007', 'IN']
csv_2 ['1330-xxxx-5560-xxxx,"Jan 1', ' 2017""', '12:35:13 AM PST', '', 'Google fee', '', 'Smart Plan (Calling & Texting)', 'com.yuilop', '1', 'unlimited_usca_tariff_and', 'astar-y3', 'US', 'NC', '27288', 'USD', '-3.00', '0.950210', 'EUR', '-2.85"']
在csv_2,你看到一個爛攤子。日期由逗號分隔,特別是日期字段和所有被視爲字符串的行。如何更改我的代碼以獲得與csv_1相同的結果?
有一個問題,我不知道他們每個人的csv格式是什麼。有大約1000個csv文件,因此打開它們中的每一個都是一件耗時的工作,你有什麼建議嗎? –
你需要知道有多少格式有1000個csv文件,畢竟你需要在解析所有csv文件後處理這些信息,不是嗎? –
好的,你知道我不會立即收到所有文件,所以我不知道接下來會發生什麼!所以我認爲你的意思是像有異常,並找出不同的CSV格式,並分別與他們的行爲..我雖然嗅探器可以自動完成這項工作,我們不需要關心這部分。@安東尼奧Beamud –