2015-06-24 24 views
6

Tôi đang cố gắng để đọc trong một file văn bản trông giống như sau:python không đúng cách đọc trong tập tin văn bản

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

và đây là những gì tôi có:

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])) 

tôi đã làm nó theo cách này cho một tập tin trước đó rất giống với tập tin này, và mọi thứ hoạt động tốt. Tuy nhiên, tệp này không được đọc đúng cách. Đầu tiên nó mang lại cho tôi một lỗi "danh sách chỉ số ngoài phạm vi" cho closure_starttime.append(str(data1[1])) và khi tôi yêu cầu nó để in những gì nó có cho data1 hoặc closure_date, nó mang lại cho tôi một cái gì đó giống như

['\x006\x00/\x008\x00/\x001\x004\x00,\x00 \x001\x008\x003\x002\x00,\x00 \x001\x009\x000\x003\x00\r\x00\n'] 

Tôi đã thử viết lại văn bản tập tin trong trường hợp có một cái gì đó bị hỏng về tập tin cụ thể đó, và nó vẫn làm điều tương tự. Tôi không chắc tại sao vì lần trước điều này làm việc tốt.

Mọi đề xuất? Cảm ơn!

+0

này vào những gì không in (repr (g)) mang đến cho bạn –

+0

Có một không gian trước mỗi dòng? –

+0

Tôi đã sửa một số định dạng, nhưng đã đưa ra một số giả định về các viên đạn .. không có dấu gạch ngang trong tệp thực, phải không? – Collin

Trả lời

6

Điều này trông giống như tệp được phân cách bằng dấu phẩy có mã hóa UTF-16 (do đó là \x00 byte trống). Bạn sẽ phải giải mã các đầu vào từ UTF-16, như vậy:

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) 
+0

Có điều này đã làm việc, cảm ơn bạn! Xin lỗi, tôi là một lập trình viên nghiệp dư nên đây là một chút lạ với tôi. Và sau đó bỏ qua dòng đầu tiên là tiêu đề? –

+0

@Melinda: Đó là lý do tại sao anh ấy có dòng 'g.next() # skip header line'. Nó cũng có thể được viết 'next (g) '. –

1

thử Look

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])) 
Các vấn đề liên quan