2013-01-09 69 views
6

Tôi đang sử dụng phần sau để đọc tệp được phân tách bằng tab. Có ba cột trong tệp nhưng cột đầu tiên bị bỏ qua khi tôi in tiêu đề cột. cột đầu tiên quápython đọc một tệp được phân tách bằng dấu phân tách bằng cách sử dụng dấu phân tách

f = open("/tmp/data.txt") 
for l in f.readlines(): 
    print l.strip().split("\t") 
    break 
    f.close() 

Output: [ 'session_id \ t', '\ tevent_id_concat']

tên cột đầu tiên là id nơi nó s không in trong mảng trên

EDIT

in l mang lại những điều sau

EDIT 1:

'id\tsession_id\tevent_id_concat\r\n' 

    Output: ['id\t', '\tevent_id_concat'] 
+0

Nó sẽ hoạt động. Bạn có thể thêm 'in l' trước câu lệnh' print' của bạn và hiển thị đầu ra không? P.S. Ngoài ra, không cần '.readlines()' ở đây, khá nhiều như mọi khi. –

+0

tôi đã cung cấp cho in l – Rajeev

+0

Bạn có thể hiển thị đầu ra của 'print repr (l)' không? – poke

Trả lời

6

Nó sẽ làm việc nhưng nó là tốt hơn để sử dụng 'với':

with open('/tmp/data.txt') as f: 
    for l in f: 
     print l.strip().split("\t") 

nếu nó không thì có lẽ tệp của bạn không có định dạng bắt buộc.

+0

Nhưng làm thế nào để 'dải 'có thể loại bỏ một từ? –

+0

Cách tiếp cận dựa trên mô-đun nên được ưu tiên vì nó xử lý nhiều trường hợp cạnh có thể –

14

Tôi cũng khuyên bạn nên sử dụng mô-đun csv. Nó rất dễ sử dụng và phù hợp nhất nếu bạn muốn đọc trong bảng giống như các cấu trúc được lưu trữ trong định dạng CSV giống như (tab/không gian/thứ khác được phân tách).

Các module documentation đưa ra ví dụ tốt, nơi việc sử dụng đơn giản nhất được ghi nhận là:

import csv 
with open('/tmp/data.txt', 'r') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     print row 

Mỗi hàng là một danh sách rất hữu ích nếu bạn muốn làm thao tác dựa trên chỉ số.

Nếu bạn muốn thay đổi dấu phân cách có từ khóa cho điều này nhưng tôi thường sử dụng các phương ngữ được xác định trước cũng có thể được xác định thông qua từ khóa.

import csv 
with open('/tmp/data.txt', 'r') as f: 
    reader = csv.reader(f, dialect='excel', delimiter='\t') 
    for row in reader: 
     print row 

Tôi không chắc chắn nếu điều này sẽ khắc phục vấn đề của bạn, nhưng việc sử dụng các module xây dựng sẽ đảm bảo với bạn rằng cái gì là sai với tập tin của bạn và không mã của bạn nếu lỗi sẽ vẫn còn.

+0

Không cần phải làm 'reader = csv.reader (f, phương ngữ = 'excel', dấu phân cách = '\ t')', có một định dạng 'excel-tab' được định nghĩa để bạn có thể chỉ cần sử dụng thay vì tinh chỉnh định dạng 'excel': 'reader = csv.reader (f, phương ngữ = 'excel-tab')' –

Các vấn đề liên quan