Печать строк в файле без сброса указателя - PullRequest
0 голосов
/ 16 мая 2019

Я изучаю Python, и сейчас я хочу напечатать определенные строки в файле, в данном случае все четные строки (при условии базы 1).

В бесчисленном количестве мест в Интернете я вижутот же простой цикл, который якобы работает.Например, этот SO поток , или эта статья .

Все они используют метод ниже

f = open('output.txt', 'r')
for line in f:
    print(line)

Для меня это вообще ничего не возвращает, за исключением "Процесс завершен с кодом завершения 0"

Использование f.seek(0) до for line... подтвердило мое подозрение, что указатель был в нижней части файла.

Имея эту информацию, я построил следующее

f = open('Output.txt', 'r')
startline = 1
s = (startline-1 | 1) + 1 #determine first even line nr. from specified starting line
count = 0

for a in f: count += 1

for line in range(s-1, count, 2):
    f.seek(0)
    print(f.readlines()[line])  

Это работает, но не объясняет, почему людям , а не так часто приходится сбрасывать указатель на вершину.

Рядом с этим выводятся все необходимые строки, но с пустой строкой между ними.Если я использую print(f.readlines()[line] + 'END') вместо этого, результаты будут следующими: казалось бы, пустая строка теперь обязательно является новой строкой?

Да, смелый сэр Робин обернулся на
END
И галантно* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *.1042 * РЕДАКТИРОВАТЬ: мой текущий весь код

f = open('Output.txt')
startline = 1
s = (startline-1 | 1) + 1
count = 0

for a in f: count += 1
f.seek(0)
for line in range(s-1, count, 2):
    f.seek(0)
    print(f.readlines()[line], end = '')

for line in f:
    print(line)

с выводом

Да, храбрый сэр Робин обернулся около
И галантно он выбил
Храброразговаривает с ногами
Он сделал очень смелое отступление
Процесс завершен с кодом выхода 0

1 Ответ

1 голос
/ 16 мая 2019

Вы можете достичь того же результата, не беспокоя указатель на файл:

with open('Output.txt') as f:
    for i, line in enumerate(f):
        if i%2 == 1:
            print(line, end = '')

(Проверка нечетных строк, поскольку вы хотите начать отсчет с 1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...