Python 100Days Challenge Day7
Pythonにおけるループ処理、for文とwhile文について学ぶ。
ループ処理においてループのネストとループ内でのbreak
, continue
の使い方も合わせて書いておく。
forループの使い方
これは指定したシーケンス(リスト・タプル・文字列 etc.)の各要素に対して繰り返し処理をするために使う。
# 基本構文
for <出力する対象> in <反復する対象(リストやシーケンス)>:
# <出力する対象>に対して行いたい処理を書く
基本構文を踏まえて下記コードを解説すると、果物のリスト(fruits)から1つずつ果物(fruit)を取り出し、取り出した果物を出力する、これがfor文。
# リストの要素を出力する
fruits = ['apple', 'banana', 'cherry']
for fruit in fruits:
print(fruits)
>
['apple', 'banana', 'cherry']
['apple', 'banana', 'cherry']
['apple', 'banana', 'cherry']
whileループの使い方
whileループは指定した条件が真である限り繰り返し処理を行う。
# 0から10までの数を出力する
count = 0
while count < 11:
print(count)
count += 1
>
0
1
(2~9は省略)
10
breakとcontinue
breakの使い方
breakはループを強制終了するときに使う。
# 最初に見つかった偶数を出力
numbers = [1,3,5,6,7,8]
for number in numbers:
if number % 2 == 0:
print(f"最初に見つけた偶数: {number}")
break
> 最初に見つけた偶数: 6
continueの使い方
continueはループの反復をスキップして次の反復に進むために使う。
# 偶数のみ出力する
numbers = [1,2,3,4,5,6]
for number in numbers:
if number % 2 != 0:
continue
print(number)
>
2
4
6
これらを踏まえて、ログファイルの解析で使えそうなコードを書いてみる。
例:ログファイル解析で使えそうなコード
ログファイルを解析するとき、エラーメッセージを抽出して特定のエラーメッセージが見つかった場合に処理を停止するためのコードを書いてみた。
書くコード
- ログファイルを行ごとに処理する
- ログファイルの内容を行ごとに分割する
- 各行について、エラーが含まれているかどうかをチェック
- エラーが含まれている行を見つけた場合、その行を出力して処理を終える
- エラーが含まれてない行はその内容をログとして出力
- エラーメッセージの統計を収集する
- エラーメッセージの出現回数を記録するための辞書(errors_counts)を初期化する
- 各行について、エラーが含まれているかどうかをチェック
- エラーが含まれている場合、エラーメッセージを抽出
- 抽出したエラーメッセージが辞書に存在しない場合、カウントを初期化
- その後、エラーメッセージのカウントを増やす
- エラーが含まれてない場合、次のstepへ進む
- 統計情報の出力
- 辞書に記録されたエラーメッセージとその出現回数を出力する
# サンプルログファイル
log_data = """
INFO: Starting the process
DEBUG: Initializing the system
ERROR: Failed to load configuration
INFO: Retrying to load configuration
ERROR: Configuration file not found
INFO: Process ended
"""
# ログファイルを行ごとに処理する
lines = log_data.strip().split('\n')
for line in lines:
if 'ERROR' in line:
print(f"Error found: {line}")
break
else:
print(f"Log: {line}")
# エラーメッセージの統計を収集する
error_counts = {}
for line in lines:
if 'ERROR' in line:
error_message = line.split('ERROR: ')[1]
if error_message not in error_counts:
error_counts[error_message] = 0
error_counts[error_message] += 1
else:
# エラーが含まれてない場合、次に進む
continue
# 辞書に記録されたエラーメッセージとその出現回数を出力する
for error, count in error_counts.items():
print(f"{error}: {count} occurrence(s)")
>
Log: INFO: Starting the process
Log: DEBUG: Initializing the system
Error found: ERROR: Failed to load configuration
Failed to load configuration: 1 occurrence(s)
Configuration file not found: 1 occurrence(s)
あとがき
段々Pythonわかってきた…気がする。
CDKを使ってlambdaを動かすのは7月中にやっておきたい。
Memo on programming by Tomo.