Python 遍歷檔案每一行判斷是否只有一個換行符詳解

霍格沃兹测试开发学社發表於2024-06-19

前言

在檔案處理過程中,判斷檔案每一行是否只有一個換行符是一個常見需求。作為測試工程師,我們經常需要對檔案的格式進行驗證,確保資料的完整性和規範性。本文將詳細介紹如何使用 Python 遍歷檔案的每一行,並判斷每一行是否只有一個換行符。

需求分析

我們需要編寫一個 Python 程式,該程式可以:

  • 開啟並讀取指定檔案。
  • 遍歷檔案的每一行。
  • 判斷每一行是否只有一個換行符。
  • 輸出判斷結果。

程式設計

  1. 檔案讀取

Python 提供了多種方式讀取檔案內容,可以使用 open 函式配合 with 語句安全地開啟和讀取檔案。

  1. 判斷換行符

每一行的末尾如果只有一個換行符,說明該行是有效行;如果有多個換行符或其他字元,說明該行存在異常。我們可以使用字串操作來實現這一判斷。

  1. 輸出結果

將每一行的判斷結果輸出,方便使用者檢視和驗證。

程式碼實現

  1. 基礎程式碼

首先,我們編寫基礎程式碼來讀取檔案並遍歷每一行:

def check_newline_in_file(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        for line_number, line in enumerate(file, start=1):
            if line.endswith('\n') and line.strip() == '':
                print(f"Line {line_number}: Only newline character found.")
            elif line.endswith('\n'):
                print(f"Line {line_number}: Valid line with content.")
            else:
                print(f"Line {line_number}: Invalid line without newline character.")

  1. 完整實現

在基礎程式碼上,我們進一步最佳化,實現對每一行是否只有一個換行符的判斷:

def check_newline_in_file(file_path):
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            for line_number, line in enumerate(file, start=1):
                stripped_line = line.rstrip('\n')
                if stripped_line == '':
                    print(f"Line {line_number}: Only newline character found.")
                else:
                    print(f"Line {line_number}: Content found.")
    except FileNotFoundError:
        print(f"File not found: {file_path}")
    except Exception as e:
        print(f"An error occurred: {e}")

# 使用示例
file_path = 'example.txt'
check_newline_in_file(file_path)

功能擴充套件

  1. 檢查多種換行符

在不同作業系統中,換行符可能不同(如 Windows 中是 \r\n,而 Unix/Linux 中是 \n)。我們可以擴充套件程式碼來處理不同型別的換行符:

def check_newline_in_file(file_path):
    try:
        with open(file_path, 'rb') as file:
            for line_number, line in enumerate(file, start=1):
                line_str = line.decode('utf-8')
                if line_str.endswith('\n') or line_str.endswith('\r\n'):
                    stripped_line = line_str.rstrip('\r\n')
                    if stripped_line == '':
                        print(f"Line {line_number}: Only newline character found.")
                    else:
                        print(f"Line {line_number}: Content found.")
                else:
                    print(f"Line {line_number}: Invalid line without proper newline character.")
    except FileNotFoundError:
        print(f"File not found: {file_path}")
    except Exception as e:
        print(f"An error occurred: {e}")

# 使用示例
file_path = 'example.txt'
check_newline_in_file(file_path)
  1. 儲存結果到檔案

將判斷結果儲存到輸出檔案中,方便後續檢視和分析:

def check_newline_in_file(file_path, output_path):
    try:
        with open(file_path, 'rb') as file, open(output_path, 'w', encoding='utf-8') as output_file:
            for line_number, line in enumerate(file, start=1):
                line_str = line.decode('utf-8')
                if line_str.endswith('\n') or line_str.endswith('\r\n'):
                    stripped_line = line_str.rstrip('\r\n')
                    if stripped_line == '':
                        result = f"Line {line_number}: Only newline character found.\n"
                    else:
                        result = f"Line {line_number}: Content found.\n"
                else:
                    result = f"Line {line_number}: Invalid line without proper newline character.\n"
                output_file.write(result)
    except FileNotFoundError:
        print(f"File not found: {file_path}")
    except Exception as e:
        print(f"An error occurred: {e}")

# 使用示例
file_path = 'example.txt'
output_path = 'output.txt'
check_newline_in_file(file_path, output_path)

總結

透過本文的詳細介紹,相信您已經掌握瞭如何使用 Python 遍歷檔案的每一行,並判斷是否只有一個換行符。合理利用這些方法,可以提高檔案處理的效率和準確性。

相關文章