os.walkが特定のファイルを歩いた後に停止する方法を見つけようとしています。os.walk開始点と終了点を設定する - python
私はログファイルのディレクトリを日付順に整理しています。私はgrep検索を置き換えようとしているので、ユーザが指定した日付範囲に格納されたIPアドレスを見つけることができます。
プログラムは、次の引数がかかります。サブネットで
-i IPv4またはIPv6アドレスを
-sは日すなわち2013年12月20日には、ファイル構造
-e終了日と一致して起動
topdownオプションがエンドポイントを宣言できるようにする論理であると仮定していますが、これを実行する最も良い方法は何ですか?私はループ中に考えている。
私の質問で何か問題がある場合は、事前にお詫びします。ちょうど血糖値をチェックした、それは低い56、gdタイプ1です。
追加情報
ファイル構造は、このような
--01
--02
として流れ/ index_borderに位置することになります - - 01
----...
---- 29
___________Hopeこれは明確である、年間のフォルダには、時間単位のファイルを含む、一日のフォルダを含む、月のフォルダが含まれています。日付は私がされている下向き.___________________
終了日は、包括的である必要があります、(私は一日だけ上に移動するコードを追加することができますので、私はそれにあまりを集中していない)
を高めます日付範囲関数を作成しようとすると、私は日時書類でこれを見ていないのに驚きました。
import os, gzip, netaddr, datetime, argparse
startDir = '.'
def sdate_format(s):
try:
return (datetime.datetime.strptime(s, '%Y/%m/%d').date())
except ValueError:
msg = "Bad start date. Please use yyyy/mm/dd format."
raise argparse.ArgumentTypeError(msg)
def edate_format(e):
try:
return (datetime.datetime.strptime(e, '%Y/%m/%d').date())
except ValueError:
msg = "Bad end date. Please use yyyy/mm/dd format."
raise argparse.ArgumentTypeError(msg)
parser = argparse.ArgumentParser(description='Locate IP address in log files for a particular date or date range')
parser.add_argument('-s', '--start_date', action='store', type=sdate_format, dest='start_date', help='The first date in range of interest.')
parser.add_argument('-e', '--end_date', action='store', type=edate_format, dest='end_date', help='The last date in range of interest.')
parser.add_argument('-i', action='store', dest='net', help='IP address or address range, IPv4 or IPv6 with optional subnet accepted.', required=True)
results = parser.parse_args()
start = results.start_date
end = results.end_date
target_ip = results.net
startDir = '/flows/index_border/{0}/{1:02d}/{2:02d}'.format(start.year, start.month, start.day)
print('searching...')
for root, dirs, files in os.walk(startDir):
for contents in files:
if contents.endswith('.gz'):
f = gzip.open(os.path.join(root, contents), 'r')
else:
f = open(os.path.join(root, contents), 'r')
text = f.readlines()
f.close()
for line in text:
for address_item in netaddr.IPNetwork(target_IP):
if str(address_item) in line:
print line,
停止基準がどのようなものであるべきかはわかりません。それが最初に一致するアイテムですか? ( 'walk()'がディレクトリを予測可能な順序で歩いているかどうかチェックして、結果の一貫性を保証する)。より一般的には、単純なディレクトリ/ファイル構造の例と、この例の結果として得たいものですが、まだ動作していないものは歓迎します。 – zezollo