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