Python CSV error: line contains NULL byte
Python CSV error: line contains NULL byte
As @S.Lott says, you should be opening your files in rb mode, not rU mode. However that may NOT be causing your current problem. As far as I know, using rU mode would mess you up if there are embedded r
in the data, but not cause any other dramas. I also note that you have several files (all opened with rU ??) but only one causing a problem.
If the csv module says that you have a NULL (silly message, should be NUL) byte in your file, then you need to check out what is in your file. I would suggest that you do this even if using rb makes the problem go away.
repr()
is (or wants to be) your debugging friend. It will show unambiguously what youve got, in a platform independant fashion (which is helpful to helpers who are unaware what od
is or does). Do this:
print repr(open(my.csv, rb).read(200)) # dump 1st 200 bytes of file
and carefully copy/paste (dont retype) the result into an edit of your question (not into a comment).
Also note that if the file is really dodgy e.g. no r or n within reasonable distance from the start of the file, the line number reported by reader.line_num
will be (unhelpfully) 1. Find where the first x00
is (if any) by doing
data = open(my.csv, rb).read()
print data.find(x00)
and make sure that you dump at least that many bytes with repr or od.
What does data.count(x00)
tell you? If there are many, you may want to do something like
for i, c in enumerate(data):
if c == x00:
print i, repr(data[i-30:i]) + *NUL* + repr(data[i+1:i+31])
so that you can see the NUL bytes in context.
If you can see x00
in the output (or