【发布时间】:2014-12-08 16:40:08
【问题描述】:
到目前为止,我已经找到了一种产生名称、字符串和额外字符串的方法。它适用于第二个,但不适用于第一个?这很奇怪,因为格式非常相似。是因为它是多行吗?我认为if line == '+': pass 会绕过这个问题。
我在 print '\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')
【问题讨论】:
-
如果把第一个
yield改成yield name, body(去掉extra,好像就随心所欲了?
标签: python string split generator yield