Вы не предоставляете все детали, но я предполагаю, что:
- в начале есть только 1 строка заголовка, и вам не нужно, что в ней
- остальные строки содержат только целые числа
- вам не нужно сохранять конечный '0'
Я также должен предположить, что ваш файл может быть очень большим, поэтому чтение всего файла в памяти или сохранение всего результирующего списка в памяти не очень хорошая идея.
Вот быстрое решение, которое читает файл построчно и использует генератор для вывода каждой строки в виде списка. Вы можете использовать весь результат как один список, если хотите, например:
result_list = read_data('foo.dat')
или вы можете сделать то же, что и я, в примере вызова и использовать каждую строку результата, когда она зачитывается. Вы можете вызвать этот файл напрямую, если вы используете Linux, в противном случае просто свяжите его с интерпретатором Python и назовите его с именем файла данных в качестве первого аргумента, и он будет выводить результаты построчно - это будет работать, даже если ваш файл огромен. Вы также можете просто импортировать файл как модуль и использовать метод read_data и использовать результаты в других вычислениях.
Обратите внимание, что он выполняет некоторую проверку ошибок (строка заголовка начинается с ap, а строки данных заканчиваются на 0 и содержат только целые числа), и вы, вероятно, захотите либо вообще не делать эту проверку, либо вызвать соответствующее исключение когда они встретятся.
#!/usr/bin/env python
import sys
def read_data(fn):
"""Reads in datafile
data file is in format:
p wfgh 1111 11111 111111
287 48 0
65626 -1818 0
4654 21512 02020 0
where first line begins with p and is a header, and following lines
are comprised of at least 2 integers plus a tailing 0.
Pass in the filename, the resulting list of lists of integers will be
returned.
"""
f = open(fn, 'r')
# check for header line
assert(f.readline().split()[0]=='p')
for l in f:
d = [int(col) for col in l.split()]
if not d:
# skip empty lines
continue
# check we have at least 2 integers and the last column is 0
assert(d[-1] == 0 and len(d) >= 3)
# yield current line
yield d[:-1]
if __name__ == '__main__':
for l in read_data(sys.argv[1]):
print unicode(l)