Чтение из текстового файла python

1

У меня есть текстовый файл, содержащий матрицу чисел:

999 999  10  8
3 4 999 999 999 
6 999 2 7 999
999 6 3 5  6
999 9 1 10 999
10 6 999 2 2 999

Я пытаюсь прочитать каждую строку и сохранить ее в массиве в Python, но У меня возникла проблема с изменением каждого значения на int с string. Я попытался использовать int() при анализе каждой строки, но получаю ошибку, заключающуюся в невозможности передать list в аргумент int().

  • 2
    Добавьте образец вашего кода.
Теги:
parsing

4 ответа

3

попробуйте следующее:

matrix = [[int(i) for i in line.split()] for line in open('myfile.txt')]

[править] если вы не хотите, чтобы первая строка только что прочитала его раньше.

with open('myfile') as f:
    f.readline()
    matrix = ....
  • 2
    читать строки не нужно.
  • 0
    Да, похоже, это работает хорошо, но я не могу упомянуть, что не хочу читать первую строку txt-файла, есть идеи?
Показать ещё 2 комментария
2

Используя map(), вы получите list of list s:

>>> with open('myfile.txt') as matrix:
...     [map(int, line.split()) for line in matrix]
...
[[999, 999, 10, 8], [3, 4, 999, 999, 999], [6, 999, 2, 7, 999], [999, 6, 3, 5, 6], [999, 9, 1, 10, 999], [10, 6, 999, 2, 2, 999]]
  • 1
    зачем map внутри списка понимание, если map делает то же самое, что и [f(x) for x in iterable] ?
  • 1
    @JBernardo, map() устраняет внутренний цикл for вы используете внутри своего ответа
0

Для каждой строки разделите символ пробела, а затем преобразуйте каждый токен в int. Одним из способов сделать это, используя понимание списка, является:

s = "999 999 10 8"
[int(t) for t in s.split(" ")]
#evaluates to [999, 999, 10, 8]
  • 2
    Не сработает, если учесть новые строки.
  • 1
    разделение на пустые места по умолчанию
-1
nums = []
with open('file.txt') as f:
    for line in f:
        nums.append([int(n) for n in line.split()])

Вы могли бы написать это как одно понимание списка, но это может стать неприятным.

  • 3
    Почему понимание списка может стать неприятным?
  • 0
    @ Майк видит другой ответ. Понимание вложенного списка редко бывает хорошей формой; приведенный выше может быть самым кратким, но он слишком длинный и плотный.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню