Como @ S.Lott diz, você deve abrir seus arquivos no modo 'rb', não no modo 'rU'. No entanto, isso pode NÃO estar causando o problema atual. Tanto quanto eu sei, usar o modo 'rU' iria confundi-lo se houver \rdados incorporados , mas não causaria quaisquer outros dramas. Também observo que você possui vários arquivos (todos abertos com 'rU' ??), mas apenas um está causando o problema.
Se o módulo csv diz que você tem um byte "NULL" (mensagem boba, deveria ser "NUL") em seu arquivo, então você precisa verificar o que está em seu arquivo. Eu sugiro que você faça isso mesmo se usar 'rb' resolver o problema.
repr()é (ou quer ser) seu amigo na depuração. Ele mostrará de forma inequívoca o que você tem, de uma forma independente da plataforma (o que é útil para auxiliares que não sabem o que odé ou o que faz). Faça isso:
print repr(open('my.csv', 'rb').read(200)) # dump 1st 200 bytes of file
e copie / cole cuidadosamente (não digite novamente) o resultado em uma edição de sua pergunta (não em um comentário).
Observe também que se o arquivo for realmente duvidoso, por exemplo, no \ r ou \ n dentro de uma distância razoável do início do arquivo, o número da linha relatado por reader.line_numserá (inutilmente) 1. Encontre onde está o primeiro \x00(se houver) fazendo
data = open('my.csv', 'rb').read()
print data.find('\x00')
e certifique-se de despejar pelo menos essa quantidade de bytes com repr ou od.
O que data.count('\x00')isso te diz? Se houver muitos, você pode querer fazer algo como
for i, c in enumerate(data):
if c == '\x00':
print i, repr(data[i-30:i]) + ' *NUL* ' + repr(data[i+1:i+31])
para que você possa ver os bytes NUL no contexto.
Se você pode ver \x00na saída (ou \0na sua od -csaída), então você definitivamente tem byte (s) NUL no arquivo e precisará fazer algo assim:
fi = open('my.csv', 'rb')
data = fi.read()
fi.close()
fo = open('mynew.csv', 'wb')
fo.write(data.replace('\x00', ''))
fo.close()
A propósito, você olhou para o arquivo (incluindo as últimas linhas) com um editor de texto? Ele realmente se parece com um arquivo CSV razoável como os outros arquivos (sem exceção de "byte NULL")?
od -ca aparência da primeira linha?