"Строка содержит нулевой байт" в CSV reader (Python)
Я пытаюсь написать программу, которая смотрит на .Файл CSV (вход.csv) и переписывает только те строки, которые начинаются с определенного элемента (исправлено.csv), как указано в текстовом файле (вывод.формат txt.)
вот как выглядит моя программа прямо сейчас:
import csv
lines = []
with open('output.txt','r') as f:
for line in f.readlines():
lines.append(line[:-1])
with open('corrected.csv','w') as correct:
writer = csv.writer(correct, dialect = 'excel')
with open('input.csv', 'r') as mycsv:
reader = csv.reader(mycsv)
for row in reader:
if row[0] not in lines:
writer.writerow(row)
к сожалению, я продолжаю получать эту ошибку, и я понятия не имею, что это такое.
Traceback (most recent call last):
File "C:Python32Sample ProgramcsvParser.py", line 12, in <module>
for row in reader:
_csv.Error: line contains NULL byte
кредит для всех людей здесь, чтобы даже получить меня на данный момент.
8 ответов:
Я решил аналогичную проблему с более простым решением:
import codecs csvReader = csv.reader(codecs.open('file.csv', 'rU', 'utf-16'))ключ использовал модуль кодеков, чтобы открыть файл с кодировкой UTF-16, есть намного больше кодировок, проверьте документация.
Я предполагаю, что у вас есть байт NUL во входных данных.csv. Вы можете проверить это с помощью
if '' in open('input.csv').read(): print "you have null bytes in your input file" else: print "you don't"Если вы
reader = csv.reader(x.replace('', '') for x in mycsv)возможно, вы что. Или это может означать, что у вас есть utf16 или что-то "интересное".CSV-файл.
вы можете просто встроить генератор, чтобы отфильтровать нулевые значения, если вы хотите притвориться, что их не существует. Конечно, это предполагает, что нулевые байты на самом деле не являются частью кодировки и действительно являются каким-то ошибочным артефактом или ошибкой.
посмотреть
(line.replace('','') for line in f)ниже, Также вы, вероятно, захотите открыть этот файл с помощью moderb.import csv lines = [] with open('output.txt','r') as f: for line in f.readlines(): lines.append(line[:-1]) with open('corrected.csv','w') as correct: writer = csv.writer(correct, dialect = 'excel') with open('input.csv', 'rb') as mycsv: reader = csv.reader( (line.replace('','') for line in mycsv) ) for row in reader: if row[0] not in lines: writer.writerow(row)
это скажет вам, какая линия является проблемой.
import csv lines = [] with open('output.txt','r') as f: for line in f.readlines(): lines.append(line[:-1]) with open('corrected.csv','w') as correct: writer = csv.writer(correct, dialect = 'excel') with open('input.csv', 'r') as mycsv: reader = csv.reader(mycsv) try: for i, row in enumerate(reader): if row[0] not in lines: writer.writerow(row) except csv.Error: print('csv choked on line %s' % (i+1)) raiseвозможно этой от daniweb было бы полезно:
Я получаю эту ошибку при чтении из файла CSV: "ошибка выполнения! строка содержит нулевой байт". Есть идеи о первопричине этой ошибки?
...
хорошо, я получил его и думал, что я опубликую решение. Просто еще не вызвал меня горе... Файл был сохранен в .формате xls вместо один.КШМ не поймайте это, потому что само имя файла имело.расширение csv в то время как тип был неподвижен .xls
Если вы хотите заменить нули с чем-то вы можете сделать это:
def fix_nulls(s): for line in s: yield line.replace('', ' ') r = csv.reader(fix_nulls(open(...)))
Я недавно исправил эту проблему, и в моем случае это был сжатый файл, который я пытался прочитать. Проверьте формат файла. Затем проверьте, что содержимое является то, что расширение относится.
превращение моей среды linux в чистую полную среду UTF-8 сделало трюк для меня. Попробуйте выполнить следующие действия в командной строке:
export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 export LANGUAGE=en_US.UTF-8
сложный способ:
Если вы развиваетесь под Lunux, вы можете использовать всю силу sed:
from subprocess import check_call, CalledProcessError PATH_TO_FILE = '/home/user/some/path/to/file.csv' try: check_call("sed -i -e 's|\x0||g' {}".format(PATH_TO_FILE), shell=True) except CalledProcessError as err: print(err)самое эффективное решение для огромных файлов.
проверено на Python3, Kubuntu
Comments