亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python CSV錯誤:行包含NULL字節

Python CSV錯誤:行包含NULL字節

Cats萌萌 2019-10-28 14:49:21
我正在使用以下代碼處理一些CSV文件:reader = csv.reader(open(filepath, "rU"))try:    for row in reader:        print 'Row read successfully!', rowexcept csv.Error, e:    sys.exit('file %s, line %d: %s' % (filename, reader.line_num, e))一個文件引發此錯誤:file my.csv, line 1: line contains NULL byte我能做什么?Google似乎建議它可能是Excel文件,未正確保存為.csv。有什么辦法可以解決Python中的這個問題?==更新==在下面@JohnMachin的評論之后,我嘗試將以下行添加到腳本中:print repr(open(filepath, 'rb').read(200)) # dump 1st 200 bytes of filedata = open(filepath, 'rb').read()print data.find('\x00')print data.count('\x00')這是我得到的輸出:'\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1\x00\x00\x00\x00\x00\x00\x00\x00\ .... <snip>813834因此該文件確實包含NUL字節。
查看完整描述

3 回答

?
慕少森

TA貢獻2019條經驗 獲得超9個贊

正如@ S.Lott所說,您應該以“ rb”模式而不是“ rU”模式打開文件。但是,這可能不會引起您當前的問題。據我所知,如果\r數據中嵌入了“ rU”模式,則會使您大失所望,但不會引起任何其他麻煩。我還注意到您有幾個文件(全部以'rU'??打開),但只有一個會引起問題。


如果csv模塊說您的文件中有一個“ NULL”(愚蠢的消息,應為“ NUL”)字節,那么您需要檢查文件中的內容。即使使用'rb'可以使問題消失,我還是建議您這樣做。


repr()是(或想成為)調試朋友。它會以獨立于平臺的方式明確顯示您所擁有的內容(這對不知道od是什么或做什么的幫助者很有幫助)。做這個:


print repr(open('my.csv', 'rb').read(200)) # dump 1st 200 bytes of file

并仔細地將結果復制/粘貼(請勿重新輸入)以編輯您的問題(而不是評論)。


還要注意,如果文件確實很模糊,例如距文件開頭的合理距離內沒有\ r或\ n,則報告的行號reader.line_num將(無益)1. \x00通過執行以下操作查找第一個行(如果有)


data = open('my.csv', 'rb').read()

print data.find('\x00')

并確保至少使用repr或od轉儲那么多字節。


是什么data.count('\x00')告訴你嗎?如果有很多,您可能想要做類似的事情


for i, c in enumerate(data):

    if c == '\x00':

        print i, repr(data[i-30:i]) + ' *NUL* ' + repr(data[i+1:i+31])

這樣您就可以在上下文中看到NUL字節。


如果你可以看到\x00在輸出(或者\0在你的od -c輸出),那么你肯定有在文件中NULL字節(S),你需要做這樣的事情:


fi = open('my.csv', 'rb')

data = fi.read()

fi.close()

fo = open('mynew.csv', 'wb')

fo.write(data.replace('\x00', ''))

fo.close()

順便說一句,您是否使用文本編輯器查看了文件(包括最后幾行)?它實際上看起來像其他文件(沒有“ NULL字節”例外)一樣合理的CSV文件嗎?


查看完整回答
反對 回復 2019-10-28
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

將其讀取為UTF-16也是我的問題。


這是我的代碼,最終起作用了:


f=codecs.open(location,"rb","utf-16")

csvread=csv.reader(f,delimiter='\t')

csvread.next()

for row in csvread:

    print row

其中location是您的csv文件的目錄。


查看完整回答
反對 回復 2019-10-28
?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

我也遇到了這個問題。使用Python csv模塊,我試圖讀取在MS Excel中創建的XLS文件,NULL byte并遇到遇到的錯誤。我環顧四周,發現了xlrd Python模塊,用于從MS Excel電子表格文件讀取和格式化數據。使用該xlrd模塊,我不僅能夠正確讀取文件,而且還可以以前所未有的方式訪問文件的許多不同部分。


我認為這可能對您有幫助。


查看完整回答
反對 回復 2019-10-28
  • 3 回答
  • 0 關注
  • 1132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號