1 回答
TA贡献1797条经验 获得超4个赞
如果我没看错,您希望保留以下所有行:
从单词开始
switch
跟随在以以下开头
switch
但在下一个空行之前的行之后
这不是太难:
keptlines = []
with open(myfile) as f:
for line in f:
if line.startswith('switch '):
keptlines.append(line)
for line in f: # Continue iterating f for additional lines to keep
if not line.rstrip():
break # We hit an empty line, return to looking for switch
keptlines.append(line)
如果您想将各种开关分开,则有多种不同的方法(例如,dict按开关编号键控,以lists 行作为值),但这是基本模式。
为了完整起见,有一种变体方法可以使用 来简化代码itertools,在文件顶部添加导入from itertools import takewhile并替换:
for line in f: # Continue iterating f for additional lines to keep
if not line.rstrip():
break # We hit an empty line, return to looking for switch
keptlines.append(line)
只需:
keptlines.extend(takewhile(str.rstrip, f))
类似的方法可以将外部循环推入dropwhile调用中,但这会变得非常复杂(您无法在dropwhile不丢失数据的情况下移除包装器,并且您必须为每个新switch块重新包装它),因此它可能不值得.
添加回答
举报