Чтение одного целого числа за один раз с помощью python
Как я могу прочитать int из файла? У меня есть большой (512 МБ) txt-файл, который содержит целочисленные данные в виде:
0 0 0 10 5 0 0 140
0 20 6 0 9 5 0 0
Теперь, если я использую c = file.read(1)
, я получаю только один символ за раз, но мне нужно одно целое число за раз. Например:
c = 0
c = 10
c = 5
c = 140 and so on...
Любое великое сердце, пожалуйста, помогите. Заранее спасибо.
3 ответа:
Вот один из способов:
with open('in.txt', 'r') as f: for line in f: for s in line.split(' '): num = int(s) print num
Делая
Затем вы разбиваете каждую строку на пробелы и читаете каждое число по ходу.for line in f
, Вы читаете бит за битом (не используя ниread() all
, ниreadlines
). Важно, потому что ваш файл большой.Вы можете сделать больше проверки ошибок, чем этот простой пример, который будет блевать, если файл содержит поврежденные данные.
Как говорится в комментариях, этого должно быть достаточно для вас - в противном случае, если это возможно, ваш файл может иметь очень длинные строки, которые вы можете сделать что-то более сложное, как чтение блоков за раз.
512 Мб на самом деле не так уж и много. Если вы все равно собираетесь создать список данных, я не вижу проблем с выполнением шага чтения за один раз:
my_int_list = [int(v) for v in open('myfile.txt').read().split()]
Если вы можете структурировать свой код так, что вам не нужен весь список в памяти, было бы лучше использовать генератор:
def my_ints(fname): for line in open(fname): for val in line.split(): yield int(val)
И затем использовать его:
for c in my_ints('myfile.txt'): # do something with c (which is the next int)