Seperti yang dikatakan @ S. Lott, Anda harus membuka file Anda dalam mode 'rb', bukan mode 'rU'. Namun itu mungkin TIDAK menyebabkan masalah Anda saat ini. Sejauh yang saya tahu, menggunakan mode 'rU' akan mengacaukan Anda jika ada yang tertanam \rdi data, tetapi tidak menyebabkan drama lain. Saya juga mencatat bahwa Anda memiliki beberapa file (semua dibuka dengan 'rU' ??) tetapi hanya satu yang menyebabkan masalah.
Jika modul csv mengatakan bahwa Anda memiliki byte "NULL" (pesan konyol, harus "NUL") di file Anda, maka Anda perlu memeriksa apa yang ada di file Anda. Saya menyarankan Anda melakukan ini bahkan jika menggunakan 'rb' membuat masalah hilang.
repr()adalah (atau ingin menjadi) teman debugging Anda. Ini akan menunjukkan dengan jelas apa yang Anda miliki, dalam mode platform independen (yang berguna untuk pembantu yang tidak menyadari apa yang odsedang atau dilakukan). Melakukan hal ini:
print repr(open('my.csv', 'rb').read(200)) # dump 1st 200 bytes of file
dan dengan hati-hati salin / tempel (jangan ketik ulang) hasilnya ke dalam edit pertanyaan Anda (bukan menjadi komentar).
Perhatikan juga bahwa jika file benar-benar cerdik mis. Tidak ada \ r atau \ n dalam jarak yang wajar dari awal file, nomor baris yang dilaporkan oleh reader.line_numakan (tidak membantu) 1. Temukan di mana yang pertama \x00(jika ada) dengan melakukan
data = open('my.csv', 'rb').read()
print data.find('\x00')
dan pastikan bahwa Anda membuang setidaknya banyak byte dengan repr atau od.
Apa yang data.count('\x00')memberitahumu? Jika ada banyak, Anda mungkin ingin melakukan sesuatu seperti
for i, c in enumerate(data):
if c == '\x00':
print i, repr(data[i-30:i]) + ' *NUL* ' + repr(data[i+1:i+31])
sehingga Anda dapat melihat byte NUL dalam konteks.
Jika Anda dapat melihat \x00di output (atau \0di od -coutput Anda ), maka Anda pasti memiliki byte NUL di file, dan Anda perlu melakukan sesuatu seperti ini:
fi = open('my.csv', 'rb')
data = fi.read()
fi.close()
fo = open('mynew.csv', 'wb')
fo.write(data.replace('\x00', ''))
fo.close()
Omong-omong, apakah Anda sudah melihat file (termasuk beberapa baris terakhir) dengan editor teks? Apakah itu benar-benar terlihat seperti file CSV yang wajar seperti file lainnya (tanpa pengecualian "NULL byte")?
od -cbaris pertama itu?