working with what the generators following expressions python string split generator yield

with - El generador no funciona para dividir la cadena por un identificador particular. Python 2



what is a python generator (1)

El problema real es que no te estás separando antes de ceder. Así que cambie el código como este

if line.startswith(''@''): if name: body, extra = body.split(''+'',1) yield name, body, extra body = '''' name = line else: body = body + line body, extra = body.split(''+'',1) yield name, body, extra

Además, la siguiente condición if no tiene ningún efecto en la salida del programa

if line == ''+'': pass

Entonces, lo eliminé en el código anterior.

Hasta ahora he encontrado una forma de dar el nombre, la cadena y la cadena adicional. Funciona para el segundo pero no funciona para el primero? es tan raro porque los formatos son muy similares. ¿es porque son múltiples líneas? pensé que if line == ''+'': pass omitiría el problema.

agregué en la impresión ''/ n'' para mostrar la diferencia

Entrada:

@first_name AlongStringOfText ThatHasNoSpaces ButIsSeparatedByLineBreaks + {+iuhsfIUHSDFUi8849308989829 0990+-]@@@#*$()(@*$*)))***)@@**@#*u sdfiuhnknwuiewi + @second_name MoreTextThatCouldBeOnOneLine + +{~~~(@#UhuisdfiuhIUHDSFIUFHIl)}9823)88hafff #empty line at end

Script actual:

def organize(input_file): name = None body = '''' extra = '''' for line in input_file: line = line.strip() if line.startswith(''@''): if name: yield name, body, extra body = '''' extra = '''' name = line else: body = body + line if line == ''+'': pass print ''/n'' body,extra = body.split(''+'',1) yield name,body,extra for line in organize(file_path): print line

Salida:

(''@first_name'', ''AlongStringOfTextThatHasNoSpacesButIsSeparatedByLineBreaks+{+iuhsfIUHSDFUi88493089898290990+-]@@@#*$()(@*$*)))***)@@**@#*usdfiuhnknwuiewi+'', '''') (''@second_name'', ''MoreTextThatCouldBeOnOneLine'', ''+{~~~(@#UhuisdfiuhIUHDSFIUFHIl)}9823)88hafff'')

Salida deseada:

(''@first_name'',''AlongStringOfTextThatHasNoSpacesButIsSeparatedByLineBreaks'',''{+iuhsfIUHSDFUi88493089898290990+-]@@@#*$()(@*$*)))***)@@**@#*usdfiuhnknwuiewi'') (''@second_name'',''MoreTextThatCouldBeOnOneLine'',''+{~~~(@#UhuisdfiuhIUHDSFIUFHIl)}9823)88hafff'')