Чтение строк между двумя строками в текстовом файле с использованием Python

#python #text-files

#python #текстовые файлы

Вопрос:

У меня есть текстовый файл с сообщением, в котором оно начинается со строки ‘START’ и заканчивается строкой ‘END’. Я хочу, чтобы код Python считывал строки между этими двумя словами. У меня есть код, который считывает строки между этими двумя словами. но он также читает строки ‘START’ и ‘End’. мне нужны только строки между этими двумя словами.

я попробовал этот код, который также считывает слова ‘START’ и ‘END’.

 data=[]
flag=False
with open('/tmp/test.txt','r') as f:
    for line in f:
        if line.startswith('START'):
            flag=True
        if flag:
            data.append(line)
        if line.strip().endswith('END'):
            flag=False

print ''.join(data)  
  

пожалуйста, предложите код, который будет считываться между двумя словами, исключая строки ‘START’ и ‘END’

Комментарии:

1. Образец вашего test.txt ?

Ответ №1:

Просто измените порядок своих операторов if. Подумайте о порядке, в котором они передаются, и когда if flag выполняется оценка. Кроме того, вы можете использовать elif so, чтобы выполнялось только одно из трех условий, но убедитесь, что elif flag строка является последним условием.

В соответствии с тем, как вы настроили свой пример, он проверит, начинается ли строка с START , а затем установит флаг. Сразу после этого вы проверяете, был ли установлен флаг, поэтому он будет распечатан START . Кроме того, он будет печатать каждую строку, затем проверьте, после того, как вы напечатали строку, чтобы увидеть, должна ли она быть напечатана END или нет.

Изменив порядок, вы увидите, что если строка начинается с START , то ниже нет команды, которая напечатает строку. Аналогично, он проверяет, следует ли останавливаться перед печатью END строки.

 with open('/tmp/test.txt','r') as f:
    for line in f:
        if line.strip().endswith('END'):
            flag=False
        if flag:
            data.append(line)
        if line.startswith('START'):
            flag=True
  

elif Версия, вероятно, является лучшим вариантом, поскольку она сэкономит вам несколько проверок операторов if, но за итерацию может быть выполнен только один результат. Поэтому, если флаг изменен, он никогда не распечатает строку.

 with open('/tmp/test.txt','r') as f:
    for line in f:
        if line.startswith('START'):
            flag=True
        elif line.strip().endswith('END'):
            flag=False
        elif flag:
            data.append(line)
  

Ответ №2:

Используйте elif , а не несколько if строк, чтобы гарантировать выполнение только одной ветви.

 data=[]
flag=False
with open('/tmp/test.txt','r') as f:
    for line in f:
        if line.startswith('START'):
            flag=True
        elif line.strip().endswith('END'):
            flag=False
        elif flag:
            data.append(line)

print 'n'.join(data)