2014-09-13 93 views
1

我是Python的新手。我想知道從文本文件中的字段提取數據的最佳方式是什麼?從Python中的文本文件中的字段中提取數據

我的文本文件保存了網絡的信息。它看起來像這樣:

Name: Machine_1 Status: On IP:10.0.0.1 
Name: Machine_2 Status: On IP:10.0.0.2 
Network_name: Private Router_name: router1 Router_ID=3568 
Subnet: Tenant A 

該文件結構不是很好。由於行的非同類性質,它甚至不能表示爲CSV文件,即它們都不具有相同的列標識符。

我想要做的是能夠獲得我想要的任何領域的價值,例如, Router_ID與。

請幫我找到解決辦法。

謝謝。

+0

什麼是 「場」 的定義是什麼?即使存在多種定義,Field的定義也是清晰的。如果你無法弄清楚這個定義,你永遠無法編碼這個行爲。 – 2014-09-13 13:11:09

+0

這只是文件的一小部分,還是整件事?如果它是整個事情,你保證只有字段值改變,但字段名稱是不變的? FWIW,除了討厭的'Tenant A're.compile(r'([^:= s)*)[:=] \ s *([^:= \ S] *)')' – 2014-09-13 14:39:18

回答

1

您可以使用正則表達式來掃描您的文件。您必須爲每個要提取的字段定義正則表達式。例如:

import re 
data = """Name: Machine_1 Status: On IP:10.0.0.1 
Name: Machine_2 Status: On IP:10.0.0.2 
Network_name: Private Router_name: router1 Router_ID=3568 
Subnet: Tenant A""" 
for line in data.split('\n'): 
    ip = re.match('.*IP:(\d+.\d+.\d+.\d+)', line) 
    rname = re.match('.*Router_name: (\w+)', line) 
    if ip and ip.lastindex > 0: 
     print(ip.group(1)) 
    if rname and rname.lastindex > 0: 
     print(rname.group(1)) 

輸出:

10.0.0.1 
10.0.0.2 
router1