1

WiFi ログ スキャナーを作成しようとしています。現在、CTRL+F とキーワードを使用して手動でログを確認しています。そのプロセスを自動化したいだけです。つまり、.txt ファイルを bang して出力を受け取ります。

私はコードの骨組みを手に入れたので、かなり後で作成することができますが、小さな問題が発生しています。スキャナーでファイルを検索し (完了)、その文字列のインスタンスをカウントし (完了)、出現回数を出力し (完了)、その後にその文字列が最後に発生した行番号を含む完全な行を出力します (行番号は必須ではありません。複数ある場合は、どちらがより最近の問題であるかを推測しやすくするだけです)。

現在、文字列を含むすべての行の出力を取得しています。なぜこれが起こっているのかはわかっていますが、最後の行だけを出力するように指定する方法が思いつきません。

これが私のコードです:

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)

それは、ほとんど私の作業コードになる予定です (さらにいくつかの問題検索を追加する必要があります)。テキスト ファイルの代わりに文字列を検索するバージョンがあります。これにより、次が出力されます。

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 についてはあまり心配しないでください。リストされているすべての例が必要です。後の段階でそれらを 1 行に整理できるかどうかを確認します。

補足として、これの多くは以前の検索からごちゃ混ぜになっているので、おそらくこれを行うためのより良い方法があると思います. これは私の現在の懸念事項ではありませんが、この面で提案がある場合は、説明/説明へのリンクを提供してください。なぜあなたの方法が優れているのか. 私はPythonにかなり慣れていないので、主に現在理解していることを扱っています。:)

ご協力ありがとうございます。さらに情報が必要な場合はお知らせください。

ジョー

4

2 に答える 2

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で を2 回繰り返していることに気付きましたfile。あなたは確かにそれを1回の反復に凝縮することができます:)。

于 2013-02-07T19:07:41.617 に答える