0

私の質問はここでの他の質問と非常に似ていますが、私が探している正確な答えが見つからなかったので、ベテランのPythonユーザーが私をさらに進めてくれることを願っています.

私は自分の仕事のためにスクリプト作成方法を学んでいますが、それを学ぶためにトレーニング センターに送られません。そのため、私の最高技術責任者は、要約された Wireshark コレクション レポートからログ ファイルを作成する方法を学ぶべきだと言いました。私は Bash で幸運に恵まれましたが、彼は私が Python を流暢に話せるようになることを望んでいます。基本的に、Wireshark レポートから新しいファイルに grep して、DNS トラフィックの発生数とリストを表示しようとしています。唯一のことは、効果的であるためには、使用するたびに新しいデータセットを使用して動作できる必要があるということです。そうでなければ、これは無意味な作業です.

>> f1 = open('/home/user/file','r')
>> for line in f1
** if "DNS" in line:
**** print line

2 つの質問:
1) 各 DNS オカレンスをカウントするにはどうすればよいですか?
2) 新しい txt ファイルにパイプ/印刷するにはどうすればよいですか?

4

2 に答える 2

0

新しい変数を初期化してアイテムをカウントするだけです

counter = 0

if 'DNS' in line:
    counter += 1

print counter

データを保存するWRT。Pythonで実行するか、データを印刷してファイルに出力することができます

counter = 0
data = []

if 'DNS' in line:
    counter += 1
    data.append(line)

to_s = "\n".join(data)
f = open('out.txt', 'w')
f.write(to_s)
f.close()
于 2013-06-10T20:56:54.403 に答える
0

これはもう少し高度かもしれませんが、ファイル処理に関しては、ジェネレーターのパイプラインを行うのが本当に好きです!

# this is a generator (an iterable) which only outputs a 
# line containing "DNS" if it was requested in an iteration
# furthermore, the way i use a generator here is called "list comprehension"
dns_lines = ( line for line in open('/home/user/file','r') if "DNS" in line )

# the with-statement uses python's magic-methods to take care of 
# opening and closing the file
with open("output", 'w') as f:
    # enumerate works on generators
    # it enumerates each item that is iterated over
    # a tuple is returned (count, line)
    for count_line in enumerate(dns_lines):
        f.write("%d - %s" % (count_line))

ジェネレーターとファイル処理の詳細については、David Beazleyによるこちらをご覧ください

Python がどれほど強力であるかについて、もう少し詳しく知りたいと思っていると思います。したがって、私の長いコメント。:)

// 編集: ここで何が起こるかについてのもう少しの説明:

  • 最初の行は、ジェネレーター オブジェクトを生成するだけです。
  • ファイルの読み取りは、2 番目の for ループで実行を開始します。
  • この反復が開始されるとすぐに、「DNS」を含む行が見つかるまでファイルが読み取られます。
  • タプル (カウント、行) が作成され、まさにこの反復に渡されます。
  • タプルは、フォーマット文字列を使用してファイルに書き込まれます!
  • 次の反復が行われ、次の行が要求され、ファイルの読み取りが再び開始されます。

これが役立つことを願っています!ジェネレーターは、リスト全体をメモリにロードすることを防ぎ、多くの巧妙なトリックとパイプライン化された処理を可能にします。ただし、この記事で説明できることは他にもたくさんあります。

于 2013-06-10T20:57:47.840 に答える