簡體   English   中英

如何使用Python中的CSV解析器解析字符串?

[英]How to parse a string using a CSV parser in Python?

我需要使用CSV解析器解析字符串。 我在很多地方找到了這個解決方案,但它對我不起作用。 我使用的是Python 3.4,現在我將其更改為2.7.9但仍然沒有...

import csv
import StringIO

csv_file = StringIO.StringIO(line)
csv_reader = csv.reader(csv_file)
for data in csv_reader:
      # do something

任何人都可以建議我使用CSV解析器解析此字符串的另一種方法嗎? 或者我該如何使這項工作?

Obs:我有一個CSV格式的字符串,里面有逗號的字段,這就是我無法以標准方式解析它的原因。

您需要在包含逗號的元素周圍加上雙引號。

CSV格式實現RFC 4180 ,其中規定:

  1. 包含換行符(CRLF),雙引號和逗號的字段應括在雙引號中。

所以例如(在這里運行代碼。):

import StringIO
import csv

# the text between double quotes will be treated 
# as a single element and not parsed by commas
line = '1,2,3,"1,2,3",4'

csv_file = StringIO.StringIO(line)
csv_reader = csv.reader(csv_file)
for data in csv_reader:
    # output: ['1', '2', '3', '1,2,3', '4']
    print data

作為另一種選擇,您可以更改分隔符。 csv.reader的默認值是delimiter=','quotechar='"'但這些都可以根據您的需要進行更改。

分號分隔符:

line = '1;2;3;1,2,3;4'

csv_file = StringIO.StringIO(line)
csv_reader = csv.reader(csv_file, delimiter=';')
for data in csv_reader:
    # output: ['1', '2', '3', '1,2,3', '4']
    print data

垂直條Quotechar

line = '1,2,3,|1,2,3|,4'

csv_file = StringIO.StringIO(line)
csv_reader = csv.reader(csv_file, quotechar='|')
for data in csv_reader:
    # output: ['1', '2', '3', '1,2,3', '4']
    print data

此外,python csv模塊適用於python 2.6 - 3.x ,所以這不應該是問題。

跳出頁面而不是重新實現CSV解析的明顯解決方案是首先預處理數據並用一些從未使用的令牌字符(甚至單詞COMMA)替換字符串中的所有逗號,然后將其輸入CSV解析器,然后返回數據並用逗號替換標記。

對不起,我自己在Python中沒有嘗試過這個,但是我的數據用另一種語言引用了問題,這就是我解決它的方法。

此外,Bcorso的答案要完整得多。 我只是快速破解常見的限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM