#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)