python неправильно читает текстовый файл

Я пытаюсь прочитать в текстовом файле, который выглядит примерно так:

Date, StartTime, EndTime 
6/8/14, 1832, 1903
6/8/14, 1912, 1918
6/9/14, 1703, 1708
6/9/14, 1713, 1750

и вот что у меня есть:

g = open('Observed_closure_info.txt', 'r')
closure_date=[]
closure_starttime=[]
closure_endtime=[]
file_data1 = g.readlines()
for line in file_data1[1:]:
    data1=line.split(', ')
    closure_date.append(str(data1[0]))
    closure_starttime.append(str(data1[1]))
    closure_endtime.append(str(data1[2]))

Я сделал это таким образом для предыдущего файла, который был очень похож на этот, и все работало нормально. Однако этот файл не читается должным образом. Сначала это дает мне ошибку "индекс списка вне диапазона" для closure_starttime.append(str(data1[1])) и когда я прошу его распечатать то, что у него есть для data1 или closure_date, это дает мне что-то вроде

['x006x00/x008x00/x001x004x00,x00 x001x008x003x002x00,x00 x001x009x000x003x00rx00n']

Я попытался переписать текстовый файл на случай, если что-то повреждено в этом конкретном файле, и он по-прежнему делает то же самое. Я не уверен, почему, потому что в прошлый раз это работало нормально.

какие предложения? Спасибо!

2 ответов


это выглядит как разделенный запятыми файл с кодировкой UTF-16 (отсюда \x00 нулевые байты). Вам нужно будет декодировать вход из UTF-16, например:

import codecs

closure_date=[]
closure_starttime=[]
closure_endtime=[]
with codecs.open('Observed_closure_info.txt', 'r', 'utf-16-le') as g:
    g.next() # skip header line
    for line in g:
        date, start, end = line.strip().split(', ')
        closure_date.append(date)
        closure_starttime.append(start)
        closure_endtime.append(end)

попробуй такое

g = open('Observed_closure_info.txt', 'r')
closure_date=[]
closure_starttime=[]
closure_endtime=[]
file_data1 = g.readlines()
for line in file_data1[1:]:
    data1=line.decode('utf-16').split(',')
    closure_date.append(str(data1[0]))
    closure_starttime.append(str(data1[1]))
    closure_endtime.append(str(data1[2]))