亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從文本中的特定世界讀取文本告訴python中文本文件中的下一個空間

如何從文本中的特定世界讀取文本告訴python中文本文件中的下一個空間

函數式編程 2021-12-26 14:36:03
我有一個文本文件,其中包含交換機名稱和每個交換機的端口,例如:switch 1[1] server 1[2] server 2[3] server 3[4] server 4 some text that no one need  switch 2 [1] server 1 [2] server 2 [3] server 3 [4] server 4現在我想要做的是拆分文本,當它讀取開關 1 時拆分開始,當它讀取一個空格或空行時停止,問題是我有一些文本,我在中間不需要任何幫助
查看完整描述

1 回答

?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

如果我沒看錯,您希望保留以下所有行:

  1. 從單詞開始 switch

  2. 跟隨在以以下開頭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塊重新包裝它),因此它可能不值得.


查看完整回答
反對 回復 2021-12-26
  • 1 回答
  • 0 關注
  • 183 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號