2009-10-06 39 views
12

Có cách nào thanh lịch bỏ qua dòng đầu tiên của tệp khi sử dụng mô-đun đầu vào tệp python không?Cách thanh lịch để bỏ qua dòng đầu tiên khi sử dụng mô-đun fileinput python?

Tôi có tệp dữ liệu với dữ liệu được định dạng độc đáo nhưng dòng đầu tiên là tiêu đề. Sử dụng fileinput Tôi sẽ phải bao gồm kiểm tra và loại bỏ dòng nếu dòng dường như không chứa dữ liệu.

Vấn đề là nó sẽ áp dụng cùng một kiểm tra cho phần còn lại của tệp. Với read() bạn có thể mở tệp, đọc dòng đầu tiên sau đó chuyển đến vòng lặp trong phần còn lại của tệp. Có mẹo tương tự với fileinput không?

Có cách nào thanh lịch để bỏ qua quá trình xử lý dòng đầu tiên không?

Ví dụ mã:

import fileinput 

# how to skip first line elegantly? 

for line in fileinput.input(["file.dat"]): 
    data = proces_line(line); 
    output(data) 

Trả lời

14

Module fileinput chứa một loạt các chức năng tiện dụng, một trong số đó dường như thực hiện chính xác những gì bạn đang tìm kiếm:

for line in fileinput.input(["file.dat"]): 
    if not fileinput.isfirstline(): 
    data = proces_line(line); 
    output(data) 

fileinput module documentation

+0

+1 tốt, tôi đang kiểm tra nó ngay bây giờ mặc dù từ đây có vẻ như kiểm tra được áp dụng cho mỗi dòng ... nhưng tôi có thể sai, cộng với nó có lẽ chỉ cần kiểm tra số dòng vì vậy tôi không phải ... – stefanB

+0

tại sao bạn sẽ kiểm tra nó cho mỗi dòng nếu bạn đã biết rằng dòng đầu tiên sẽ đến một lần trong đầu, phải không lãng phí? – svural

16
lines = iter(fileinput.input(["file.dat"])) 
next(lines) # extract and discard first line 
for line in lines: 
    data = proces_line(line) 
    output(data) 

hoặc sử dụng các đường itertools.islice nếu bạn thích

import itertools 
finput = fileinput.input(["file.dat"]) 
lines = itertools.islice(finput, 1, None) # cuts off first line 
dataset = (process_line(line) for line in lines) 
results = [output(data) for data in dataset] 

Kể từ khi tất cả mọi thứ được sử dụng là máy phát điện và lặp, không có danh sách trung gian sẽ được xây dựng.

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