本記事では、テキストファイルの改行コードをLF(ラインフィード)に変換する方法をまとめます。
Windows環境で作成・編集したファイルや、Windowsサーバー経由でコピーしたファイルは、改行コードがCRLF(キャリッジリターン+ラインフィード)になります。これをLinux環境で使用すると、ファイル中に^M
と表示されたり、SyntaxError
が発生したりすることがあります。
これを防ぐため、改行コードをLFに変換する方法を紹介します。
方法 1: エディタでの手動変換
VSCodeの場合
- ファイルを開く。
- 右下の「CRLF」をクリックして「LF」に変更。
- 上書き保存。
他のエディタ
ほとんどのエディタに改行コードの変更機能が備わっています。
方法 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)
以上の方法を活用することで、環境や用途に応じた柔軟な改行コードの変換が可能です。