У меня есть огромный текстовый файл, который я хочу открыть.
Я читаю файл в кусках, избегая проблем с памятью, связанных с чтением слишком большого количества файла одновременно.UnicodeDecodeError: неожиданный конец данных
фрагмент кода:
def open_delimited(fileName, args):
with open(fileName, args, encoding="UTF16") as infile:
chunksize = 10000
remainder = ''
for chunk in iter(lambda: infile.read(chunksize), ''):
pieces = re.findall(r"(\d+)\s+(\d+_\d+)", remainder + chunk)
for piece in pieces[:-1]:
yield piece
remainder = '{} {} '.format(*pieces[-1])
if remainder:
yield remainder
код бросает ошибку UnicodeDecodeError: 'utf16' codec can't decode bytes in position 8190-8191: unexpected end of data
.
Я пробовал UTF8
и получил ошибку UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte
.
latin-1
и iso-8859-1
поднял ошибку IndexError: list index out of range
Пробу входного файла:
b'\xff\xfe1\x000\x000\x005\x009\x00\t\x001\x000\x000\x005\x009\x00_\x009\x007\x004\x007\x001\x007\x005\x003\x001\x000\x009\x001\x00\t\x00\t\x00P\x00o\x00s\x00t\x00\t\x001\x00\t\x00H\x00a\x00p\x00p\x00y\x00 \x00B\x00i\x00r\x00t\x00h\x00d\x00a\x00y\x00\t\x002\x000\x001\x001\x00-\x000\x008\x00-\x002\x004\x00 \x00'
я также упомянуть, что у меня есть несколько из этих огромных текстовых файлов.
UTF16
отлично подходит для многих из них и не работает в определенном файле.
В любом случае, чтобы решить эту проблему?
Если ваш файл ввода * * UTF-16 (хотя и усечен), то Latin1 или UTF-8, безусловно, не будут работать. –
Можем ли мы увидеть образец вашего входного файла? Тогда, по крайней мере, мы можем взять удар, угадывая используемую кодировку. Прочитайте файл как двоичный файл и распечатайте его.'print (open (fileName, 'rb'). read (120))' должен дать нам достаточно для работы. –
@MartijnPieters Я добавил образец входного файла. – Presen