2015-10-20 158 views
-1

我對python腳本非常陌生,但我想將類似於以下內容的字符串複製/粘貼到以特定格式打印出結果的腳本中。我希望打印下面的每個值,我很確定正則表達式是需要的,即:解析IP值我會使用以下正則表達式^(?:[0-9] {1,3}。){ 3} [0-9] {1,3} $。我只是不確定如何將其納入腳本。串的Python腳本幫助

實施例複製/粘貼:


病毒:震網
計算機:HP_1234
域:ABC \
IP:192.168.10.1
用戶:USER1
文件:C :\ Users \ user1 \ AppData \ Local \ Microsoft \ Windows \ malo.png
Date/Time:10/19/2015 22:23:57
結果:已清理 種
病毒掃描引擎:421.6000.1009
病毒碼:419.9890.0009

摘錄的是我到目前爲止已經拼湊術語編碼:

#!/usr/bin/python 
import re 

alert = raw_input("Copy/paste alert and press Enter:\n\n\n ").split() 

print "==============================================================\n\n" 

print"Please take a look at the following issue. \n\n" 

print "Infection Name:" 
print "IP Address:" 
print "Infected file location:" 
print "Date/Time: " 
print "Domain: " 

我怎麼會去解析複製/粘貼的字符串,並從該解析中獲取填充的相應字段?我認爲re.findall可能是解決方案,但似乎並不奏效。我認爲在raw_input的末尾添加.split將允許我使用%s作爲變量,我認爲這使我走上了正確的軌道,但我仍然不確定。對不起,如果這個描述是不清楚的..我是全新的腳本。

+0

你能提供一個你想要的輸出的例子嗎? –

回答

1

,如果你只需要輸入它是如何呈現的數據和格式,它似乎是一個簡單的解析器可能的工作:

先切和串粘貼到一個文本文件(我稱之爲cut_and_paste.txt) :

Virus: Stuxnet 
Computer: HP_1234 
Domain: ABC\ 
IP: 192.168.10.1 
User: user1 
File: C:\Users\user1\AppData\Local\Microsoft\Windows\malo.png 
Date/Time: 10/19/2015 22:23:57 
Result: Cleaned 
Virus Scan Engine: 421.6000.1009 
Virus Pattern: 419.9890.0009 

現在你可以加載該文件,並解析字符串轉換爲Python字典有一個非常簡單的腳本:

with open('cut_and_paste.txt', 'r') as infile: 
    data = dict() 
    for line in infile: 
     pair = line.strip().split(':') 
     data[pair[0]] = pair[1] 

注意,這可以做更多的「PYT但是我使用了一種更容易遵循的表格,因爲你說的不像腳本那麼好用。

其基本思想是以讀取模式('r')打開文件並將其命名爲'infile',然後創建一個Python字典,允許您將數據組織爲鍵值對。對於文件中的每一行「去掉」這一行,刪除所有空格(在這種情況下基本上是換行符),然後在冒號上分割這一行。最後,通過設置dict [key] = value填充字典,因此在下一行中,冒號左側的所有內容都成爲一個鍵,右側的所有內容都成爲一個值。

當您生成報告,您可以然後使用鍵恢復數據:

print 'Take a look at the following issue:' 

print 'Infection Name:', data['Virus'] 
print 'IP Address:', data['IP'] 
... 
... 

如果你只是想產生這樣一個簡單的報告,那麼文件的解析應該做的伎倆。正則表達式會發揮作用,如果你想做一些更復雜的值本身。例如,您可能想要查找某個範圍內的IP地址等。

但是,從我可以從問題中收集的信息看來,這樣一個非常簡單的解析器應該能夠解決這個問題。

希望它可以幫助基於您的後續問題

編輯:

還有就是從字典中恢復值(即我也許應該在原來的答覆已經使用了更穩健的方式,但我試圖保持簡單)

的傳統方法從字典中獲得的數據是在原有的回答說:

print data['key'] 

這很簡單,但正如你發現拋出一個KeyError如果一個關鍵不存在。你可以用一個小的修改克服這個使用字典的get方法:

print data.get(key) 

print data.get(key, default) 

在這兩種情況下,我有一個字符串關鍵這代表什麼關鍵你正在尋找。

如果我修改報告的一部分生成(例如)一個錯字的代碼導致,這並不存在,你可以看到這些工作的關鍵:

print 'Infection Name:', data.get('Virusx') 

print 'Infection Name:', data.get('Virusx', 'Not Found') 

而原始的代碼會拋出一個KeyError異常這些 這些各自產生以下輸出:

Infection Name: None 

Infection Name: Not Found 

在第一種情況,當「Virusx」不能在字典中的默認行爲是返回無,然後將其轉換成字符串「無」中找到

此方法還允許您添加第二個參數,該參數定義了在無法找到密鑰時您希望Python如何響應。在這種情況下,我告訴Python返回一個字符串'Not Found',儘管您可以用任何字符串替換它以滿足您的需要。例如,返回空字符串可能是指示缺失數據的有效方法。

第二編輯

基於新的信息,它看起來像你需要使用maxsplit選項分裂方法。這允許您指定「分裂」的最大數量,以及它的工作原理是這樣的:

input_string = 'File: C:\Windows' 

insufficient = input_string.split(':') 
print insufficient 

correct = input_string.split(':', 1) 
print correct 

我把結果彼此相鄰,使差異更加明顯:

insufficient --> ['File', ' C', '\\Windows'] 
correct -->  ['File', ' C:\\Windows'] 

基本上它聽起來好像字符串被分割了太多次,而且你很可能只訪問前兩個分段(因此失去了剩餘部分)。

+0

謝謝!完美的作品。現在我正在處理如何處理在其中一個數據丟失時發生的錯誤,這些錯誤有時會發生。錯誤我是 回溯(最近最後一次通話): 文件 「tm_1.0.py」,第24行,在 打印 「IP地址」,數據[ 'IP'] KeyError異常: 'IP' 爲了解決這個問題,我認爲調整代碼看起來像下面的樣子會有所幫助,但這似乎並不奏效: with open('c_p.txt','r')as infile: data = dict() 爲infile中一行: \t \t嘗試: \t \t \t對= line.strip()分割( ':')。 \t個\t \t數據[對[0]] =對[1] \t \t \t \t除了KeyError異常: \t \t \t打印( '') –

+0

我剛editted答案與一些附加的信息,並稍作修改,這將有助於解決這個問題。 – gary

+0

太棒了。謝謝!最後一件事,字符串中有一個區域是複製/粘貼,讀取**'File:C:\ Windows'**,但是當我打印時,第二個冒號後的所有內容都被刪除。
所以這個:

打印 「感染文件地點:」 data.get( '文件', '')

給我** C **

而不是C:\ WINDOWS \什麼