0

Python スクリプトを使用してログ ファイルを Piwik にインポートすると、一度に 1 つのログ ファイルを正常に解析できますが、ディレクトリ内のすべてのログ ファイルを解析するにはどうすればよいですか?

readme から、スクリプトの使用法は次のとおりです。

import_logs.py [options] log_file [ log_file [...] ]

では、u_ex120101.log から u_ex120701.log までのログ ファイルがあった場合、これらのファイルをすべて実行するために一度実行するにはどうすればよいでしょうか。答えは私をじっと見つめていると確信していますが、基本的にPythonについては何も知りません。

ありがとう。

4

4 に答える 4

1

ディレクトリに多数のログファイルがあり、それらの範囲のみが必要な場合、別のオプションは、範囲とベースを取り、それぞれのログをインポートするだけの小さな Python スクリプトを作成することです (または、特に凝りたい場合は、実際にimport_logs直接インポートできます)。

PopenPython では、任意のシェル コマンドを実行できます。したがって、 を実行したい場合はimport_logs log_base_str01123.txt、次のように実行できます。

from subprocess import Popen, PIPE
print Popen("import_logs.py log_base_str01123.txt", stdout=PIPE, shell=True).stdout.read()

そして、一連の文字列に対してそれを行いたい場合:

from subprocess import Popen, PIPE
import os
base_prefix = "u_ex"
base_suffix = ".log"
logs=["my", "list", "of", "log#s"]
for log in logs:
    path = "import_logs.py {prefix}{log_name}{suffix}".format(
                prefix=prefix, log_name=log, suffix=base_suffix)
    if not os.path.exists(log):
        print Popen(,
                stdout=PIPE, shell=True).stdout.read())

これは、より汎用的なソリューションになる可能性があり、よりきめ細かい制御が可能になります。

連続した値のリストを調べたい場合は、次を使用できます。

logs = map(str, range(start_number, end_number + 1))
于 2012-07-04T03:00:44.563 に答える
1

シェルのワイルドカードを使用してスクリプトを呼び出すだけではどうですか?

cd logs/
import_logs.py u_*.log

*注: ただし、これは Windows では機能しません。Windows シェルはワイルドカードを展開しません。受信プログラムがそれを行う必要があります (つまり、import_logs.py)。

Windows の場合の解決策: cygwinpowershell、または別の *nix のようなシェルの代替品を使用してください。

于 2012-07-04T02:34:49.073 に答える
1

Pythonでglobモジュールを使用できます。glob.glob() 関数は、ワイルドカードを含む文字列を受け取り、一致するファイルとフォルダーのリストを返します。

例:

import blob

# assume file_argument is a variable containing wildcard
file_argument = '/var/log/*.log'

for log_file in glob.glob(file_argument):
    do_stuff(log_file)

これにより、Python がワイルドカード展開を実行します。

于 2012-07-23T18:34:21.393 に答える