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塊重新包裝它),因此它可能不值得.
添加回答
舉報