生成器无法按特定标识符拆分字符串。Python 2
问题内容:
到目前为止,我已经找到一种产生名称,字符串和额外字符串的方法。它适用于第二个,但不适用于第一个吗?太奇怪了,因为格式真的很相似。是因为它是多行吗?我以为if line == '+': pass
会绕过这个问题。
我在打印’\ n’中添加以显示差异
输入:
@first_name
AlongStringOfText
ThatHasNoSpaces
ButIsSeparatedByLineBreaks
+
{+iuhsfIUHSDFUi8849308989829
0990+-]@@@#*$()(@*$*)))***)@@**@#*u
sdfiuhnknwuiewi
+
@second_name
MoreTextThatCouldBeOnOneLine
+
+{~~~(@#UhuisdfiuhIUHDSFIUFHIl)}9823)88hafff
#empty line at end
当前脚本:
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
输出:
('@first_name', 'AlongStringOfTextThatHasNoSpacesButIsSeparatedByLineBreaks+{+iuhsfIUHSDFUi88493089898290990+-]@@@#*$()(@*$*)))***)@@**@#*usdfiuhnknwuiewi+', '')
('@second_name', 'MoreTextThatCouldBeOnOneLine', '+{~~~(@#UhuisdfiuhIUHDSFIUFHIl)}9823)88hafff')
所需输出:
('@first_name','AlongStringOfTextThatHasNoSpacesButIsSeparatedByLineBreaks','{+iuhsfIUHSDFUi88493089898290990+-]@@@#*$()(@*$*)))***)@@**@#*usdfiuhnknwuiewi')
('@second_name','MoreTextThatCouldBeOnOneLine','+{~~~(@#UhuisdfiuhIUHDSFIUFHIl)}9823)88hafff')
问题答案:
实际的问题是,您不split
屈服。所以像这样更改代码
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
另外,以下if
条件在程序输出中不起作用
if line == '+':
pass
因此,我在上面的代码中将其删除。