Python. Чтение из переменной построчно, аналог readline есть?
В программе написана большая функция, которая построчно считывает данные из текстового файла и обрабатывает их по своим алгоритмам.
with open(FilePath, "r") as file:
my_var1 = 'NotEnd'
while my_var1 != ''
my_var1 = file.readline().rstrip()
# дальше алгоритм обработки my_var1
print ('Ok')
Возникла необходимость продублировать ту же функцию, но с обработкой данных не из файла, а из переменной. Особенность readline, считывает строку в файле и запоминает позицию. Новое считывание readline будет происходить с новой строки. Возможно ли аналогичным образом обработать переменную, содержащую многострочный текст?
Без применения splitlines() и списка?
Предположительный пример того, что хочется получить в результате:
STR_VAR = 'Многострочная\nпеременная\nстроки из которой\nбудут обрабатываться\n'
my_var1 = 'NotEnd'
while my_var1 != ''
my_var1 = STR_VAR.readline().rstrip()
# дальше алгоритм обработки my_var1
print ('Ok')
Ответы (2 шт):
Делайте так:
import re
STR_VAR = 'Многострочная\nпеременная\nстроки из которой\nбудут обрабатываться\n'
def find_iter(s: str):
for m in re.finditer('(.+)(?:\n\r|\r\n|\n|\r)*',s):
yield m.group(0)
for s in find_iter(STR_VAR):
my_var1 = s.rstrip()
# дальше алгоритм обработки my_var1
print(my_var1)
Вывод:
Многострочная
переменная
строки из которой
будут обрабатываться
PS: зачем Вам в первом примере
my_var1 = 'NotEnd'
while my_var1 != '': ?
используйте конструкцию:
with open("test.txt", "r") as file:
for line in file:
print(line.rstrip())
io.StringIO больше всего похоже на то, что вам нужно
import io
STR_VAR = 'Многострочная\nпеременная\nстроки из которой\nбудут обрабатываться\n'
with io.StringIO(STR_VAR) as file:
my_var1 = 'NotEnd'
while my_var1 != '':
my_var1 = file.readline().rstrip()
# дальше алгоритм обработки my_var1
print ('Ok')
А что касается самого цикла обработки, вот чуть более традиционный способ его организовать
for my_var1 in map(str.rstrip, file):
# дальше алгоритм обработки my_var1
print('Ok')