[英]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 ,其中規定:
- 包含換行符(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
跳出頁面而不是重新實現CSV解析的明顯解決方案是首先預處理數據並用一些從未使用的令牌字符(甚至單詞COMMA)替換字符串中的所有逗號,然后將其輸入CSV解析器,然后返回數據並用逗號替換標記。
對不起,我自己在Python中沒有嘗試過這個,但是我的數據用另一種語言引用了問題,這就是我解決它的方法。
此外,Bcorso的答案要完整得多。 我只是快速破解常見的限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.