Site icon imageTomoMemo.dev

Memo on programming. Provided by Tomo with passion.

Pythonのループ処理「for文とwhile文」

Icon in a callout block
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.

Powered by Tomo with passion.