Как читать по одному символу за раз из файла в Python?

Я хочу прочитать в списке чисел из файла как символы по одному символу за раз, чтобы проверить, что это за символ, будь то цифра, точка, A + или -, e или E или какой-либо другой символ...а затем выполнить любую операцию, которую я хочу, основываясь на этом. Как я могу это сделать, используя существующий код, который у меня уже есть? Это пример, который я пробовал, но не работал. Я новичок в Python. Заранее спасибо!

    import sys

    def is_float(n):
        state = 0
        src = ""
        ch = n
        if state == 0:
            if ch.isdigit():
                src += ch
                state = 1
                ...

    f = open("file.data", 'r')
    for n in f:
        sys.stdout.write("%12.8en" % is_float(n))

3 ответов


for x in open() читает строки из файла. Прочитайте весь файл в виде блока текста, затем пройдите через каждый символ текста:

import sys

def is_float(n):
    state = 0
    src = ""
    ch = n
    if state == 0:
        if ch.isdigit():
            src += ch
            state = 1
            ...

data = open("file.data", 'r').read()
for n in data: # characters
    sys.stdout.write("%12.8e\n" % is_float(n))

вот метод, чтобы сделать итератор файла с одним символом за раз:

from functools import partial

with open("file.data") as f:
    for char in iter(partial(f.read, 1), ''):
        # now do something interesting with the characters
        ...
  • на С-заявлением открывает файл и безоговорочно закрывает его, когда вы закончите.
  • обычный способ читать один символ is f.read(1).
  • на частичная создает функцию нулевых аргументов, всегда вызывая Ф.читать С аргументом 1.
  • два форма аргумента iter () создает итератор, который выполняет цикл, пока вы не увидите маркер конца файла пустой строки.

на самом деле все гораздо проще. В itertools есть хорошая утилита, которой часто пренебрегают. ;-)

for character in itertools.chain.from_iterable(open('file.data')):
    process(character)