2014-04-04 70 views
2

使用python csv庫閱讀csv時,它將單引號添加到所有值。Python csv閱讀 - 如何將報價添加到字符串

這裏是一個讀出CSV代碼 -

with open(csvfile, 'rb') as data: 
    reader = csv.reader(data) 
    for row in reader: 
     print row 

CSV文件內容 -

1,XYZ(A),ABC,而讀7.05,13.10

在python中用csv.reader讀取以下格式的行 -

['1', 'XYZ (A)', 'ABC', '7.05', '13.10'] 

預期輸出 -

[1, 'XYZ (A)', 'ABC', 7.05, 13.10] 

我使用quoting format試過,但沒有運氣。

另一種選擇我想通過在由csv.reader(file)

任何建議讀行的項目逐一進行迭代將它轉換成合適的格式?

+0

看一下數據,你將永遠知道第一列是一個整數和最後兩個浮點數? – Harpal

+0

不需要。邏輯必須足夠通用以支持稍後的整數。 – Mutant

回答

3

你可以這樣說:

with open(csvfile, 'rb') as data: 
    reader = csv.reader(data) 
    for row in reader: 
     print row 
     temp = [] 
     for r in row: 
      try: 
       temp.append(float(r)) 
      except ValueError: 
       temp.append(r) 

     print temp 

給予以下的輸出:

['1', 'XYZ (A)', 'ABC', '7.05', '13.10'] 
[1.0, 'XYZ (A)', 'ABC', 7.05, 13.1] 

隨着溫度是正確的格式

編輯

要解決int被轉換爲浮點數:

with open(csvfile, 'rb') as data: 
    reader = csv.reader(data) 
    for row in reader: 
     print row 
     temp = [] 
     for r in row: 
      try: 
       if "." in row: 
        temp.append(float(r)) 
       else: 
        temp.append(int(r)) 
      except ValueError: 
       temp.append(r) 

     print temp 

賦予新的輸出:

['1', 'XYZ (A)', 'ABC', '7.05', '13.10'] 
[1, 'XYZ (A)', 'ABC', '7.05', '13.10'] 
+0

第一列是整數,使用這種方法它將添加小數點。另外,你認爲除了嘗試方法外,還會有性能問題嗎? – Mutant

+0

會有輕微的表現打擊,是的。爲了解決浮動問題,你可以在投射它之前檢查字符串值,看看它是否包含句點並且適當地轉換它。 – sheldor73