2013-04-20 40 views
0

目前,我想分析其中有4個項目每行由逗號分隔的CSV文件。例如:蟒蛇用逗號分開,忽略一個引號

1, "2,3", 4, 5

我怎樣才能把它分成:

[1,"2,3",4,5]

我嘗試使用csv.reader,但結果仍然是錯誤的方式。誰能幫忙? THX!

+10

你是怎樣嘗試使用'csv.reader',怎麼是結果錯了嗎? – Ryan 2013-04-20 18:25:47

+0

見http://stackoverflow.com/questions/2785755/how-to-split-but-ignore-separators-in-quoted-strings-in-python?rq=1 – jarmod 2013-04-20 18:33:41

回答

2

csv.reader不會做類型轉換,但這樣的事情或許是:

In [1]: import csv 

In [2]: data = ['1, "2,3", 4, 5'] 

In [3]: next(csv.reader(data, skipinitialspace=True)) 
Out[3]: ['1', '2,3', '4', '5'] 
+0

如果OP不想要的「自然」型轉換,或者'list(ast.literal_eval(line))'或'json.loads('[{}]'.format(line))'應該可以工作。 – DSM 2013-04-20 18:52:06

+0

@DSM - 你說得對。此刻,我回答了更多的預感,OP忘記了引號:) – root 2013-04-20 18:55:32

0
""" 
[xxx.csv] 
1, "2,3", 4, 5 
""" 

import re 
f = open("xxx.csv") 
line = f.readline() # line = '1, "2,3", 4, 5' 
startUnit = False # " is for start or end 
token = "" 
answer=[] 
for i in line: 
    if startUnit==False and re.match("[0-9]", i): 
     answer.append(int(i)) 
    elif i=='"': 
     if startUnit==True: 
      answer.append(token) 
     startUnit = not startUnit 
    elif startUnit==True: 
     token+=i 
    elif startUnit==False: 
     token="" 

print answer 

這是簡單的例子。 它可以使其他例外,因爲代碼僅用於您的示例。 (1,「2,3」,4,5) 我希望它有助於您

相關問題