2015-06-22 27 views
2

我有一個csv閱讀器和編寫器在Python中的問題。每當我嘗試使用一個CSV文件並將列數從大約37減少到6時,這就是我所獲得的輸出。一行的例子:Python CSV讀寫器處理引號:如何將行字段換成引號? (獲取三重引號作爲輸出)

0 「JOHNSON,JOHN J」,JOHN J. JOHNSON,TECH879,檢查技師,汽車檢查UNIT

通知所述第二場被引用。這是我在文本編輯器中查看時看到的內容。我想要引用所有的字段。有一個問題。首先,我的代碼,它的一個例子:

import os 
import csv 
alpha = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] 
with open(os.getcwd()+'/dl1/filepfr062220155.csv','w') as fp: 
identity = 0 
for i in alpha: 
    csvholder = open(os.getcwd()+'/dl1/pfr/'+i+'.csv','rb') 
    spamreader = csv.reader(csvholder, delimiter=',') 
    for row in spamreader: 
     if 'Sort Name' in row[0]: 
       pass 
     else: 
       ###SEE HERE### 
       data = [[str(identity),row[0],row[1],row[2],row[3],row[37]]] 
       identity+=1 
       a = csv.writer(fp,delimiter=',',quotechar='"') 
       a.writerows(data) 

的問題是,什麼地方我都標有「###在這裏看到###,我已經試過包裝在像這樣的報價未加引號的字段:

data = [['"'+str(identity)+'"',row[0],'"'+row[1]+'"','"'+row[2]+'"','"'+row[3]+'"','"'+row[37]+'"']] 

但是,讓我輸出看起來像這樣,用三重引號,這是不能接受的......像這樣:

「」「4」「」,「約翰遜,約翰W.」 ,「」「JOHN W. JOHNSON」「」「」「」TEC5681「」「」「」「」檢查技術員「」「」「」「」車輛檢查單位「」「

這些行的原始形式就是喜歡這樣的:

「姓名」,「姓名」,「姓名」,「姓名」等...

所以我不知道爲什麼只有在最後的輸出中引用了一個字段。我要麼需要引用所有的字段,要麼沒有引用它們。

我已經嘗試過在讀寫器和寫入器上使用和不使用「quotechar」,所有這些組合。

所以,如果你可以告訴我如何保留原始文件的原始引用或如何解決這個三重引用問題,所以我可以手動重新格式化,這將是很好的。

回答

3

quotechar僅指示作者應該使用哪種字符進行引用。這是你需要的quote=csv.QUOTE_ALL。這樣創建的作家:

a = csv.writer(fp, quoting=csv.QUOTE_ALL) 

quoting默認爲csv.QUOTE_MINIMAL,這意味着它只會報價場,如果他們包含分隔符,這就是爲什麼它只是引用「約翰遜,約翰·J」。

(請注意,我離開了delimiter因爲它已經默認爲','但當然不會傷害,如果你喜歡你明確地定義它。)

quoting和其他方言參數關鍵字參數csv.writer,並在第13.1.2節的csv模塊的Python文檔中進行了描述。

+0

謝謝。這個基本解決方案還有其他答案,但我想他們沒有按照我需要的方式說出來,因爲那時它不適用於我。把它放在我的程序的背景下幫助......再次感謝。 –

相關問題