@ S.Lott'un dediği gibi, dosyalarınızı 'rU' modunda değil, 'rb' modunda açmalısınız. Ancak bu, mevcut sorununuza neden OLMAYABİLİR. Bildiğim kadarıyla, 'rU' modunu kullanmak \r
, verilere gömülü ise sizi mahveder , ancak başka dramalara neden olmaz. Ayrıca birkaç dosyanız (tümü 'rU' ?? ile açılmış) olduğunu, ancak yalnızca birinin soruna neden olduğunu not ediyorum.
Eğer csv modülü dosyanızda "NULL" (saçma mesaj, "NUL" olmalıdır) baytınız olduğunu söylüyorsa, dosyanızda ne olduğuna bakmanız gerekir. 'Rb' kullanmak sorunu çözse bile bunu yapmanızı öneririm.
repr()
sizin hata ayıklama arkadaşınız (veya olmak istiyor). Platformdan bağımsız bir şekilde neye sahip olduğunuzu net bir şekilde gösterecektir (bu, ne od
olduğunu veya ne yaptığını bilmeyen yardımcılar için yararlıdır ). Bunu yap:
print repr(open('my.csv', 'rb').read(200)) # dump 1st 200 bytes of file
ve sonucu dikkatlice kopyalayıp / yapıştırarak (yeniden yazmayın) sorunuzun bir düzenlemesine (yoruma değil).
Ayrıca, dosya gerçekten tehlikeli ise, örneğin dosyanın başlangıcından itibaren makul bir mesafede \ r veya \ n yok ise, tarafından bildirilen satır numarasının reader.line_num
(yararsız bir şekilde) olacağını unutmayın 1. \x00
Bunu yaparak (varsa) ilkinin nerede olduğunu bulun
data = open('my.csv', 'rb').read()
print data.find('\x00')
ve repr veya od ile en azından bu kadar baytı boşalttığınızdan emin olun.
Sana ne data.count('\x00')
anlatıyor Çok fazla varsa, şöyle bir şey yapmak isteyebilirsiniz
for i, c in enumerate(data):
if c == '\x00':
print i, repr(data[i-30:i]) + ' *NUL* ' + repr(data[i+1:i+31])
NUL baytlarını bağlam içinde görebilmeniz için.
Eğer görebiliyorsanız \x00
(veya çıktıda \0
sizin de od -c
çıktı), o zaman kesinlikle dosyasında boş karakter (ler) varsa ve böyle bir şey yapmak gerekir:
fi = open('my.csv', 'rb')
data = fi.read()
fi.close()
fo = open('mynew.csv', 'wb')
fo.write(data.replace('\x00', ''))
fo.close()
Bu arada, dosyaya (son birkaç satır dahil) bir metin düzenleyiciyle baktınız mı? Diğer dosyalar gibi ("NULL bayt" istisnası olmayan) makul bir CSV dosyası gibi mi görünüyor?
od -c
gibi ilk satırı görünüyor ki?