0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python ファイルの改行コードを一括でLFへ変換する

Posted at

本記事では、テキストファイルの改行コードをLF(ラインフィード)に変換する方法をまとめます。

Windows環境で作成・編集したファイルや、Windowsサーバー経由でコピーしたファイルは、改行コードがCRLF(キャリッジリターン+ラインフィード)になります。これをLinux環境で使用すると、ファイル中に^Mと表示されたり、SyntaxErrorが発生したりすることがあります。
これを防ぐため、改行コードをLFに変換する方法を紹介します。

方法 1: エディタでの手動変換

VSCodeの場合

  1. ファイルを開く。
  2. 右下の「CRLF」をクリックして「LF」に変更。
  3. 上書き保存。

他のエディタ

ほとんどのエディタに改行コードの変更機能が備わっています。


方法 2: replace() を使ったバイナリモードでの変換

Pythonで改行コードをバイナリモードで置換する例です。

def convert_file_to_lf(file_path):
    with open(file_path, 'rb') as f:
        content = f.read()

    # 改行コードを LF に統一
    new_content = content.replace(b'\r\n', b'\n').replace(b'\r', b'\n')

    with open(file_path, 'wb') as f:
        f.write(new_content)

    print(f"Converted: {file_path}")

# 対象ファイルを指定
target_file = "path/to/your/file.py"
convert_file_to_lf(target_file)

方法 3: open() を使ったテキストモードでの変換

改行コードをテキストモードで統一する方法です。

def convert_file_to_lf_text_mode(file_path):
    with open(file_path, 'r', newline='') as f:
        content = f.read()

    with open(file_path, 'w', newline='\n') as f:
        f.write(content)

    print(f"Converted to LF: {file_path}")

# 対象ファイルを指定
target_file = "path/to/your/file.py"
convert_file_to_lf_text_mode(target_file)

newline='' を指定して開くことで、Pythonが改行コードを正しく解釈します。書き込み時に newline='\n' を指定してLFに変換します。


方法 4: subprocess で dos2unix コマンドを利用

dos2unix ツールを使う方法です。ツールがインストールされていれば簡単に利用できます。

import subprocess

def convert_file_to_lf_dos2unix(file_path):
    try:
        subprocess.run(['dos2unix', file_path], check=True)
        print(f"Converted using dos2unix: {file_path}")
    except FileNotFoundError:
        print("dos2unix コマンドが見つかりません。インストールしてください。")
    except subprocess.CalledProcessError:
        print("変換中にエラーが発生しました。")

# 対象ファイルを指定
target_file = "path/to/your/file.py"
convert_file_to_lf_dos2unix(target_file)

dos2unix はWindowsでもWSLを利用して動作させることができます。


方法 5: sed コマンドを利用

LinuxやmacOSなどで、sed コマンドを利用する方法です。

import subprocess

def convert_file_to_lf_sed(file_path):
    try:
        subprocess.run(['sed', '-i', 's/\r$//', file_path], check=True)
        print(f"Converted using sed: {file_path}")
    except subprocess.CalledProcessError:
        print("変換中にエラーが発生しました。")

# 対象ファイルを指定
target_file = "path/to/your/file.py"
convert_file_to_lf_sed(target_file)

sed -i 's/\r$//' は、行末のCRを削除して改行をLFに統一します。


方法 6: pathlib を使った簡潔な方法

Pythonのpathlibを利用したシンプルな方法です。

from pathlib import Path

def convert_file_to_lf_pathlib(file_path):
    file = Path(file_path)
    content = file.read_text(encoding='utf-8').replace('\r\n', '\n').replace('\r', '\n')
    file.write_text(content, encoding='utf-8')
    print(f"Converted using pathlib: {file_path}")

# 対象ファイルを指定
target_file = "path/to/your/file.py"
convert_file_to_lf_pathlib(target_file)

以上の方法を活用することで、環境や用途に応じた柔軟な改行コードの変換が可能です。

参考

  1. Python ファイルの改行コードを一括でLFへ変換する
  2. 【備忘録】dos2unix 改行コード変換
  3. ChatGPT
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?