2012-07-04 125 views
0

我是個Python腳本導入日誌文件中Piwik和我能成功解析一次一個日誌文件,但如何做到這一點的所有目錄中的日誌文件?用python腳本解析多個日誌文件 - 如何?使用

自述腳本的用法是:

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

所以,如果我有日誌文件u_ex120101.log到u_ex120701.log我怎麼能運行一次做所有這些文件?我敢肯定,答案是盯着我的臉,但我基本上對python一無所知。

謝謝。

回答

1

用shell通配符調用腳本怎麼樣?

cd logs/ 
import_logs.py u_*.log 

*注意:這雖然不適用於Windows。 Windows shell不會擴展通配符。接收程序必須這樣做(即,import_logs.py)

解窗口:使用cygwinpowershell或另一個* nix的狀外殼更換。

+0

我也許應該補充我使用Windows的cmd.exe這個。那會在那裏工作嗎? – acowley

+0

@acowley:你試過了嗎? Windows也使用'*'通配符。 – jdi

+0

是的,我做到了。我認爲它也試圖解析import_logs.py文件 – acowley

1

如果你有一堆日誌文件的目錄中,你只需要一個範圍當中,另一種選擇是寫一個小的Python腳本,需要在範圍和基礎,只是要求進口原木爲每一個(或者,如果你想特別想象,你可以直接導入import_logs)。

您可以使用Python Popen運行任何shell命令。所以,如果你想運行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)) 
+0

謝謝,這個答案現在不在我的聯盟中。我剛剛生成了所有文件名的列表,並將它們添加到由空格分隔的腳本中。醜但工作。 – acowley

+0

@acowley可以理解。坦率地說,如果你沒有很多編程經驗並且你不需要經常這樣做,那麼這可能是最簡單的方法。您可以更加友好並使腳本適應日誌=上週修改的所有日誌。 –

+0

使用示例中的[log_file [...]]部分不指示添加多個日誌的另一種方式?我不明白這意味着什麼。再次感謝。 – acowley

1

可以使用glob模塊在Python。 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來執行通配符擴展爲您服務。

1

我使用的是Windows Server 2012中,我與Python中沒有經驗,我有4年價值大約每大小20MB-40MB的日誌文件。

我只是想分享,我用一個免費的實用工具,我發現所謂的合併日誌來解決這個問題。使用copy *.log merged.txttype *.log > merged.txt拿了非常非常長的時間,而這個工具做了我需要幾分鐘的工作。

這裏下載:http://www.allscoop.com/dotnet-software/log-file-merge.php

+0

謝謝@philwilks,看起來像一個方便的工具。 – acowley