[英]How to write “between” and “until” to extract integers from a text file in python?
我有很多類似下面的內容。
_:9:_:SER _ 9 SER S 3 0.000 66.878
_:11:_:LEU _ 11 LEU E 8 0.000 67.168
_:108:_:ARG _ 108 ARG 1 0.000 62.398
每個項目都用空格隔開。 由於不同的線具有不同數目(例如9
, 11
, 108
),隨后的值不是在同一列的位置對齊。 在第三行中, ARG
和1
之間有3個空格,因為該行沒有該信息,因此使用空格來填充它。
我需要提取兩個信息
1) 9
, 11
, 108
在第一,第二和第三線,分別值
2) 3
, 8
, 1
值(前0.000
在第一,第二和第三線,分別地)
我想使用python編寫通用腳本來提取該信息,而不是冗長的if-then loop
來分別考慮一位,兩位和三位數字的情況。
我的想法是這樣的:
1)提取第一個和第二個之間的整數值:
2)提取第5個空格之后的整數值,直到在該值之后檢測到另一個空格為止。
如果您可以將每一行作為字符串獲取,則可以執行以下操作:
your_line = "_:108:_:ARG _ 108 ARG 1 0.000 62.398"
splitted = your_line.split()
# splitted = ['_:108:_:ARG', '_', '108', 'ARG', '1', '0.000', '62.398']
本質上,它會從原始列表中創建一個字符串列表,並由您輸入的字符分隔。如果不給split()
參數,那么它將在任何空白處拆分字符串。
現在,您可以輕松提取所需的信息:
info1 = splitted[2]
info2 = splitted[4]
如果僅提取數字字段,則可以使用正則表達式\\d+(?:\\.\\d+)?
,它讀取數字,然后是句點和更多數字 。
然后,您可以使用re.findall
將數字字段作為列表獲取,然后使用它們。
>>> fields = re.findall(r'\d+(?:\.\d*)?', lines[0])
>>> fields
['9', '9', '3', '0.000', '66.878']
>>> (fields[0], fields[2])
('9', '3')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.