[英]Parse a file in python to find first a string, then parse the following strings until it find another string
我試圖滾動通過我們的過程之一打印結果文件。
目的是瀏覽各種塊並找到特定的參數。 我試圖解決這個問題,但是找不到一種避免多次分析文件的有效方法。
這是我閱讀的輸出文件的示例:
ID:13123
Compound:xyz
... various parameters
RhPhase:abc
ID:543
Compound:lbm
... various parameters
ID:232355
Compound:dfs
... various parameters
RhPhase:cvb
我正在尋找具有RhPhase的特定ID,但是由於文件包含更多條目,因此我只想要該特定ID。 它可能有也可能沒有RhPhase; 如果有一個,我就會得到價值。
我發現的唯一方法是實際遍歷整個文件(可能是數百個塊,以了解大小),並為每個具有RhPhase的ID列出一個清單,然后在第二個實例中,我滾動瀏覽字典,檢索特定ID的值。
這感覺效率很低。 我嘗試做一些不同的事情,但是在滾動時卻陷入了困境。 所以我可以告訴python讀取每一行->當找到我想要繼續讀取的ID時->如果您發現RhPhase獲取該值,否則停在下一個ID處。
我被困在這里:
datafile=open("datafile.txt", "r")
for items in datafile.readline():
if "ID:543" in items:
[read more lines]
[if "RhPhase" in lines:]
[ rhphase=lines ]
[elif ""ID:" in lines ]
[ rhphase=None ]
[ break ]
找到ID后; 我不知道如何繼續尋找RhPhase字符串或找到第一個ID:string並停止所有操作(因為這意味着該ID沒有關聯的RhPhase)。
這將通過文件一次,並只檢查特定的ID,而不是一次分析整個內容,然后進行第二次傳遞。 可能這樣做,還是我堅持雙重解析?
通常,您可以使用一個簡單的狀態機解決這類問題:讀取各行,直到找到您的ID; 然后將閱讀器置於特殊狀態,然后檢查要提取的參數。 在您的情況下,您只有兩種狀態:未找到ID和已找到ID,因此一個簡單的布爾值就足夠了:
foundId = False
with open('datafile.txt', 'r') as datafile:
for line in datafile:
if foundId:
if line.startswith('RhPhase'):
print('Found RhPhase for ID 543:')
print(line)
# end reading the file
break
elif line.startswith('ID:'):
print('Error: Found another ID without finding RhPhase first')
break
# if we haven’t found the ID yet, keep looking for it
elif line.startswith('ID:543'):
foundId = True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.