2011-11-03 195 views
1

我想解決這個問題。 我讀從以下幾列CSV fiile數據:從csv文件讀取Python

id, name, price 

所以我用下面的代碼讀取CSV:

import sys 
import csv as input 

def readFile(path): 
    try: 
     finput = input.reader(open(path,'rb'),delimiter=',',quotechar='|') 
    except IOError as (errno,strerror): 
      print "I/O error({0}): {1}".format(errno,strerror) 
    except: 
      print "Unexpected Error: ",sys.exc_info()[0] 
      raise 
    # covert format into list 
    fmod = list(finput) 
    return fmod 

但問題是name字段可以像

名,item_det 現在「」爲我創建一個麻煩.. ,而不是讀的名稱字段作爲一個單一的實體有在描述一個逗號.. 它是分裂特定領域。 我該如何解決這個問題。 感謝

+2

一次讀取一行文件(無分隔符),並查看具有更高級功能的Python正則表達式函數之一,將字符串分割爲字段 –

+3

通常情況下,您的CSV文件會在其中包含引號,這樣一行應該是'| name,item_det |,other_field,another_field'(因爲你設置了'quotechar ='|'')。 CSV模塊可以處理這個問題。如果沒有,您可能會想要像@MartinBeckett所說的那樣手動解析它,或者檢查列表的長度並在必要時手動合併這兩個字段。 – Dougal

+0

你有沒有對csv輸入文件創建的控制,或者你被迫處理破碎的csv文件?通常人們使用'quotechar ='「'' –

回答

1

CSV就是這樣的:「逗號分隔」。您可能需要引用名稱字段:

|name,item_det| 

或者使用轉義字符,但你必須通過設置引用到QUOTE_NONE打開它:

reader = csv.reader(open(path, "rb"), delimiter=',', quoting=csv.QUOTE_NONE, escapechar="\\") 

例子:

name\,item_det 

否則,請勿使用csv模塊。

1

只要確保包含您的分隔符字符(,)任何單個值括在quotechar|,在你的例子)。因此,任何時候連續的name字段的形式爲<name>, <item_det>,該行應該讀取類似... ,|<name>, <item_det>|, ...的內容。