Як говорить @ S.Lott, ви повинні відкривати свої файли в режимі 'rb', а не в режимі 'rU'. Однак це НЕ може бути причиною вашої поточної проблеми. Наскільки я знаю, використання режиму 'rU' зіпсує вас, якщо вони є вбудованими \r
в дані, але не спричинить жодних інших драм. Я також зазначу, що у вас є кілька файлів (усі відкриті з '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
виході), то ви обов'язково маєте у файлі байли NUL, і вам потрібно буде зробити щось подібне:
fi = open('my.csv', 'rb')
data = fi.read()
fi.close()
fo = open('mynew.csv', 'wb')
fo.write(data.replace('\x00', ''))
fo.close()
До речі, ви подивилися файл (включаючи останні кілька рядків) з текстовим редактором? Насправді він схожий на розумний файл CSV, як і інші файли (без винятку "NULL байт")?
od -c
перший рядок?