2013-02-07 62 views
1

我正在嘗試創建WiFi日誌掃描程序。目前我們使用CTRL + F和關鍵字手動檢查日誌。我只是想讓這個過程自動化。即轟擊.txt文件並接收輸出。Python 2.7.3:搜索/計數字符串txt文件,返回該字符串的最終出現的完整行

我已經得到了代碼的骨骼,可以使它稍後工作,但我遇到了一個小問題。我希望掃描器搜索文件(完成),計算該字符串的實例(完成)並輸出出現次數(完成),然後輸出該字符串最後出現的完整行,包括行號(行號不是必需的,只是讓事情變得更容易,如果存在多個問題,則更容易做出更新的問題)。

目前我得到每一行的輸出與字符串。我知道爲什麼會發生這種情況,我只是想不出一種方法來指定輸出最後一行。

這裏是我的代碼:

import os 
from Tkinter import Tk 
from tkFileDialog import askopenfilename 

def file_len(filename): 
    #Count Number of Lines in File and Output Result 
    with open(filename) as f: 
     for i, l in enumerate(f): 
      pass  
    print('There are ' + str(i+1) + ' lines in ' + os.path.basename(filename)) 


def file_scan(filename): 
    #All Issues to Scan will go here 

    print ("DHCP was found " + str(filename.count('No lease, failing')) + " time(s).") 
    for line in filename: 
     if 'No lease, failing' in line: 
      print line.strip() 

    DNS= (filename.count('Host name lookup failure:res_nquery failed') + filename.count('HTTP query failed'))/2 
    print ("DNS Failure was found " + str(DNS) + " time(s).") 
    for line in filename: 
     if 'Host name lookup failure:res_nquery failed' or 'HTTP query failed' in line: 
      print line.strip() 

    print ("PSK= was found " + str(testr.count('psk=')) + " time(s).") 
    for line in ln: 
     if 'psk=' in line: 
      print 'The length(s) of the PSK used is ' + str(line.count('*')) 



Tk().withdraw() 
filename=askopenfilename() 
abspath = os.path.abspath(filename) #So that doesn't matter if File in Python Dir 
dname = os.path.dirname(abspath) #So that doesn't matter if File in Python Dir 
os.chdir(dname)      #So that doesn't matter if File in Python Dir 
print ('Report for ' + os.path.basename(filename)) 
file_len(filename) 
file_scan(filename) 

那是,相當多,將是我工作的代碼(只需要添加一些問題,搜索),我有搜索的字符串,而不是一個版本文本文件here。它輸出以下內容:

Total Number of Lines: 38 
DHCP was found 2 time(s). 
dhcp 
dhcp 
PSK= was found 2 time(s). 
The length(s) of the PSK used is 14 
The length(s) of the PSK used is 8 

我只能有一般的東西,修改它是一個字符串,而不是txt文件,但我掃描從字符串將是什麼的txt文件。

不要太擔心PSK,我想要列出的所有例子,我會看看如果我能在晚些時候把它們整理成一行。

作爲一個便箋,很多這一切都是從以前的搜索混雜在一起,所以我有一個好主意,有可能更乾淨的方式做到這一點。這不是我目前關心的問題,但是如果您確實有這方面的建議,請提供解釋/鏈接以解釋爲什麼您的方式更好。我對python相當陌生,所以我主要處理我目前理解的東西。 :)

在此先感謝您的幫助,如果您需要更多信息,請告訴我。

回答

1

我無法對問題尚未置評,但我想我可以用一些線,你只想要一個更重要的是信息更具體的回答呢?

例如,你可以這樣做:

search_str = 'find me' 
count = 0 
for line in file: 
    if search_str in line: 
     last_line = line 
     count += 1 
print '{0} occurrences of this line:\n{1}'.format(count, last_line) 

我注意到在您file_scan通過file迭代兩次。你肯定可以把它壓縮成一個迭代:)。

+0

感謝解決,整個last_line =線位幫助! :)另外,認爲我有我的印刷聲明(後如果)縮進遠。 想到我的一個主要問題是我正在用一個字符串進行測試,但是我的主代碼使用了一個文本文檔,愚蠢的錯誤,但是您幫助我擺脫了困擾我的思維模式。 至於file_scan,yup,一定會讓那個更容易,最後整理起來,儘管開始時會保持每一個點分開,只是爲了讓我更容易區分它們。 再次感謝! – Ultrin

7

要搜索和計數串發生在我下面的方式

'''---------------------Function--------------------''' 
#Counting the "string" occurrence in a file 
def count_string_occurrence(): 
    string = "test" 
    f = open("result_file.txt") 
    contents = f.read() 
    f.close() 
    print "Number of '" + string + "' in file", contents.count("foo") 
     #we are searching "foo" string in file "result_file.txt" 
相關問題