[英]CSV import with Python; incorrect “,” delimiter behavior
我以下面的方式使用csv模塊
header = '"Id","IsDeleted","MasterRecordId","Salutation","FirstName","LastName","Name","Type","RecordTypeId","ParentId","BillingStreet","BillingCity","BillingState","BillingPostalCode","BillingCountry","BillingLatitude"'
header_c = csv.reader(header, delimiter=',', quotechar='"')
names = []
for row in header_c:
names.append(row)
檢查名稱返回:
[['Id'], ['', ''], ['IsDeleted'], ['', ''], ['MasterRecordId'], ['', ''], ['Salutation'], ['', ''], ['FirstName'], ['', ''], ['LastName'], ['', ''], ['Name'], ['', ''], ['Type'], ['', ''], ['RecordTypeId'], ['', ''], ['ParentId'], ['', ''], ['BillingStreet'], ['', ''], ['BillingCity'], ['', ''], ['BillingState'], ['', ''], ['BillingPostalCode'], ['', ''], ['BillingCountry'], ['', ''], ['BillingLatitude']]
我可以忽略所有奇數項,保持0、2、4 ....,但是我不明白我在做什么錯以及為什么逗號被保留為項。 為了刪除逗號,我必須更改什么。 'IsDeleted'應該是第二個條目(名稱[1])
提前致謝。
csv.reader()
可以處理任何iterable ,並期望每次迭代超過該iterable產生一個完整的行 。 iterable可以是類似文件的對象,或者(通常)是字符串列表 :
header_c = csv.reader([header], delimiter=',', quotechar='"')
如果只傳入一個字符串對象,則字符串本身會被迭代,就像每個字符都是一行一樣,但由於引號, csv
將繼續讀取“lines”,直到找到一個結束引號字符。
下一個“行” 僅包含一個逗號,因此被視為兩個空值的行。
或者,以前5個字符( "Id",
)為例, csv
這樣做:
"
。這是一個帶引號的值,因此請包括行末之前的所有內容。 I
,追加。 d
,追加。 "
。引用關閉,產生一個完整的行['Id']
。 ,
。 這是一個帶分隔符的完整行,因此產生['', '']
。 每當我需要將字符串值傳遞給csv.reader()
我使用str.splitlines()
; 此方法將始終返回一個列表,因此這適用於沒有換行符的行:
header_c = csv.reader(header.splitlines(True), delimiter=',', quotechar='"')
我留在換行符中(將True
傳遞給str.splitlines()
;然后使用包含換行符正確返回帶換行符的引用值。
您應該將類似文件的對象(或任何其他可迭代的對象)作為第一個參數傳遞給csv.reader 。
csv.reader(csvfile,dialect ='excel',** fmtparams)
返回一個讀取器對象,該對象將遍歷給定csvfile中的行。 csvfile可以是支持迭代器協議並在每次調用next()方法時返回字符串的任何對象-文件對象和列表對象均適用。
一種選擇是將字符串讀取到StringIO
緩沖區中:
from StringIO import StringIO
header_c = csv.reader(StringIO(header), delimiter=',', quotechar='"')
然后,以名稱命名,您將獲得:
[['Id', 'IsDeleted', 'MasterRecordId', 'Salutation', 'FirstName', 'LastName', 'Name', 'Type', 'RecordTypeId', 'ParentId', 'BillingStreet', 'BillingCity', 'BillingState', 'BillingPostalCode', 'BillingCountry', 'BillingLatitude']]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.