![](/img/trans.png)
[英]Reading .csv file with Python and DictReader missing columns
[英]Python DictReader - Skipping rows with missing columns?
我有一個Excel .CSV文件,我試圖用DictReader讀入。
一切似乎都很好,除了它似乎省略行,特別是那些缺少列的行。
我們的輸入如下:
mail,givenName,sn,lorem,ipsum,dolor,telephoneNumber
ian.bay@blah.com,ian,bay,3424,8403,2535,+65(2)34523534545
mike.gibson@blah.com,mike,gibson,3424,8403,2535,+65(2)34523534545
ross.martin@blah.com,ross,martin,,,,+65(2)34523534545
david.connor@blah.com,david,connor,,,,+65(2)34523534545
chris.call@blah.com,chris,call,3424,8403,2535,+65(2)34523534545
所以有些行缺少lorem / ipsum / dolor列,而這只是一串逗號。
我們正在閱讀:
def read_gd_dump(input_file="blah 20100423.csv"):
gd_extract = csv.DictReader(open('blah 20100423.csv'), restval='missing', dialect='excel')
return dict([(row['something'], row) for row in gd_extract])
我檢查了“某些東西”(我們的dict的關鍵)不是缺少的列之一,我原本懷疑它可能是那個。 這是之后的專欄之一。
但是,DictReader似乎完全跳過了行。 我嘗試將restval設置為某些東西,似乎沒有任何區別。 我似乎無法在Python的CSV文檔( http://docs.python.org/library/csv.html )中找到可以解釋這種行為的任何內容,但我可能誤讀了一些內容。
無法重現您的問題 - 當我保存該數據然后分配list(gd_extract)
,我看到:
[{'telephoneNumber': '+65(2)34523534545', 'ipsum': '8403', 'sn': 'bay', 'dolor': '2535', 'mail': 'ian.bay@blah.com', 'givenName': 'ian', 'lorem': '3424'}, {'telephoneNumber': '+65(2)34523534545', 'ipsum': '8403', 'sn': 'gibson', 'dolor': '2535', 'mail': 'mike.gibson@blah.com', 'givenName': 'mike', 'lorem': '3424'}, {'telephoneNumber': '+65(2)34523534545', 'ipsum': '', 'sn': 'martin', 'dolor': '', 'mail': 'ross.martin@blah.com', 'givenName': 'ross', 'lorem': ''}, {'telephoneNumber': '+65(2)34523534545', 'ipsum': '', 'sn': 'connor', 'dolor': '', 'mail': 'david.connor@blah.com', 'givenName': 'david', 'lorem': ''}, {'telephoneNumber': '+65(2)34523534545', 'ipsum': '8403', 'sn': 'call', 'dolor': '2535', 'mail': 'chris.call@blah.com', 'givenName': 'chris', 'lorem': '3424'}]
五個dicts,包括缺少ipsum
等的那些。我擔心,在你為簡化問題而做出的值得稱贊的嘗試中,你已經過度簡化了它,以便你的bug消失了。
如果您在列重復something
(不能檢查,因為你沒有在你的樣品數據列),其當然會解釋“顯然缺少”行-他們沒有從CSV閱讀的返回流失蹤,他們會在你回來的詞典中被“覆蓋”。 這可能是問題嗎?
這可能與你的問題無關,而且由於缺乏信息,Alex的分析非常合理,但你應該總是用"rb"
或"wb"
模式打開一個csv文件(假設是Python 2.X)。 如果你不這樣做,你就冒着各種神秘事件的風險。 csv文件不是文本文件,它是BINARY文件。
無論如何,請編輯您的問題以顯示:
(1)(a)樣本文件(b)腳本(c)輸出 - 它們共同證明了所謂的問題
(2)您正在運行的Python版本
(3)什么操作系統
更新:對於Python 3.X,請按照受祝福的手冊說:“”如果csvfile
是文件對象,則應使用newline=''
打開。雖然此建議僅包含在csv.reader
,但它同樣適用於csv.writer
, csv.DictReader
和csv.DictWriter
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.