[英]Using regex for extracting values from a text file
我有一個文本文件,每當遇到字符串時,我想從中提取與字符串特定距離的值。 我對此完全陌生,並且知道這些類型的模式匹配問題可以使用正則表達式來解決。
<BEGIN> AUTO,CHANSTATE
<CH> Time: 2002-07-04
<CH> Chan Doppler Code Track CdDoppler CodeRange
<CH> 0 1449.32 2914.6679 0.00 833359.36 -154.093
<CH> 1 1450.35 2414.8292 0.00 833951.94 -154.093
<CH> 2 1450.35 6387.2597 0.00 833951.94 -154.093
<END>
<BEGIN> AUTO,CHSTAT
(it goes on)---------------------
上述結構在文件內重復多次。 有什么方法可以導出多普勒值(1449.32、1450.35、1450.35)並將其存儲在 python 列表中? 既然這一切都以“AUTO,CHANSTATE”開頭,有沒有辦法可以將其作為獲取值的參考? 或任何其他可能我無法想到的方式。 任何幫助都會非常顯着。
更好的方法是逐行解析文件。 在空白處拆分行並使用列表索引2
捕獲Doppler
的值。 這種方法的優點是,如果將來需要,您也可以訪問其他參數值。 嘗試這個:
with open("sample.txt") as file: # Use file to refer to the file object
for line in file: # Parsing file line by line
data = line.split() # Split the line over whitespace
try:
if isinstance(float(data[2]), float):
print("Doppler = ", data[2])
except (IndexError, ValueError) as e:
pass
輸出:
Doppler = 1449.32
Doppler = 1450.35
Doppler = 1450.35
檢查此演示: https ://www.online-python.com/mgE32OXJW8
如果您真的想要/需要使用正則表達式,您可以這樣做。
代碼:
import re
text = '''<BEGIN> AUTO,CHANSTATE
<CH> Time: 2002-07-04
<CH> Chan Doppler Code Track CdDoppler CodeRange
<CH> 0 1449.32 2914.6679 0.00 833359.36 -154.093
<CH> 1 1450.35 2414.8292 0.00 833951.94 -154.093
<CH> 2 1450.35 6387.2597 0.00 833951.94 -154.093
<END>
<BEGIN> AUTO,CHSTAT
(it goes on)---------------------'''
find_this = re.findall('<CH>.*?[0-9].*?\s.*?([0-9].*?)\s', text)
print(find_this)
['1449.32', '1450.35', '1450.35']
[Program finished]
然而,正如其他人指出的那樣,還有其他方法可以在沒有 re 的情況下做到這一點。
或者任何其他方式...
沒有正則表達式,只有字符串函數
'<BEGIN> AUTO,CHANSTATE'
'<CH>'
開頭的每一行,
result[2]
)'<END>'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.