基本上,我有一個檔案夾,每天都會歸檔絕對巨大的日志檔案。每天更精確地創建 3 個日志檔案。
我正在撰寫一個 Python 腳本,用戶必須輸入 YYYYMMDD 格式的日期才能找到在該日期創建的 3 個檔案,然后他輸入一個 IP 地址。該腳本將讀取 3 個 .gz 檔案的內容并列印 IP 地址所在的行。
import re
import os
import glob
import gzip
from datetime import datetime, timedelta
date_entry = raw_input('Give a date in format YEAR, MONTH, DAY \n')
date = datetime.strptime(re.sub("\s ", "", date_entry), "%Y,%m,%d").date()
path = "/applis/tacacs/log/"
list_of_files = [
file for file in glob.glob(path '*.gz')
if date == datetime.fromtimestamp(os.path.getmtime(file)).date()
]
print("Files found: ")
print(list_of_files)
Adresse_IP = raw_input('IP Address \n')
for line in gzip.open(list_of_files):
if re.search(Adresse_IP, line):
print line
但我收到以下錯誤:
File "scriptacacs3.py", line 19, in <module>
for line in gzip.open(list_of_files):
File "/usr/lib/python2.7/gzip.py", line 34, in open
return GzipFile(filename, mode, compresslevel)
File "/usr/lib/python2.7/gzip.py", line 94, in __init__
fileobj = self.myfileobj = __builtin__.open(filename, mode or 'rb')
TypeError: coercing to Unicode: need string or buffer, list found
顯然它正在等待一個字串。有沒有辦法以不同的方式做到這一點?是否可以一次讀取一個檔案?
編輯:在這種情況下可以使用 fileinput 方法嗎?例如使用 fileinput.hook_compressed 因為檔案是 .gz 格式并且在一個串列中。
我還提到輸入日期后找到的檔案如下所示:
['/applis/tacacs/log/tacacs.log.7.gz', '/applis/tacacs/log/tacacs_acct.log.7.gz', '/applis/tacacs/log/tacacs_provisioning.log.4.gz']
我整個早上都在尋找一種方法來做到這一點,但我仍然被困住了。如果有人能給我一個線索,我將不勝感激。
uj5u.com熱心網友回復:
您正在一次傳遞過濾后的日志檔案名稱的完整串列,這就是您收到錯誤的原因,迭代串列傳遞或一一讀取檔案然后搜索檔案
import re
import os
import glob
import gzip
from datetime import datetime, timedelta
date_entry = raw_input('Give a date in format YEAR, MONTH, DAY \n')
date = datetime.strptime(re.sub("\s ", "", date_entry), "%Y,%m,%d").date()
path = "/applis/tacacs/log/"
list_of_files = [
file for file in glob.glob(path '*.gz')
if date == datetime.fromtimestamp(os.path.getmtime(file)).date()
]
print("Files found: ")
print(list_of_files)
Adresse_IP = raw_input('IP Address \n')
for fname in list_of_files: #iterate log file names to open it one by one
with gzip.open(fname, 'r') as file: #open single file
for line in file: #iterate all lines
if re.search(Adresse_IP, line): #search line
print(line) #print line if match
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/461227.html
標籤:Python 列表 python-2.7 压缩包
上一篇:獲取ID的最大風險
