Python: уступить или вернуть - PullRequest
0 голосов
/ 13 декабря 2018

Итак, я написал этот фрагмент кода:

def character(f):
    #Reads one character(byte by byte) from the given text file
    c = f.read(1)
    while c:
        yield c
        c = f.read(1)

Я хочу, чтобы это значение было проанализировано в приведенной ниже функции.Когда я запускаю этот код, ничего не происходит.Ошибок нет, но вывод тоже не показывается.dbc_cabin_read достигает значения счетчика 30, но ничего не печатается.Я думаю, что программа не входит в цикл.

def dbc_cabin_read(f):
    try:
        f.seek(0,0)
        ctr = 0
        for line in f.readlines():
            ctr += 1
            if ctr == 30:                 
                for c in character(f):
                    print(c, sep="", end="")
                break

    finally: 
        f.close()

В character(f), если я использую return вместо yield, возникает ошибка типа:

Исключительная ситуация: TypeError Объект NoneType не являетсяповторяемый

1 Ответ

0 голосов
/ 13 декабря 2018

f.readlines() читает весь файл.Если вы просто хотите прочитать первые 30 строк, вы можете вызвать f.readline() в цикле.Затем вы можете использовать ваш генератор, чтобы продолжить чтение из файла на этом этапе.

for _ in range(30):
    f.readline()
for c in character(f):
    print(c, sep="", end="")
...