Pythonでファイルを読み書きする際、改行コードの扱いは重要な要素となります。この記事では、Pythonでテキストファイルを読み込むとき、あるいはPythonからテキストファイルに書き込むときに、改行コードがどうなるかについて詳しく解説します。
改行コードとは
プログラムを書く方はご存知だろうが、OSによってデフォルトで使用される改行コードは異なります。現在使われている改行コードには次の3つがあります。
- LF(ラインフィード): Unix、Linux、Macで改行コードとして使われている。エスケープシーケンスで表すと「\n」。
- CR(キャリッジリターン): 古いMacで改行コードとして使われていた。エスケープシーケンスで表すと「\r」。
- CRLF: Windowsでは、CRの後にLFが続く2文字を改行コードとして扱う。エスケープシーケンスで表すと「\r\n」。
Pythonでの改行コードの扱い
Pythonのopen()
関数には改行コードを制御するnewline
引数があります。ファイルの読み書き時に改行コードがどうなるかは、このnewline
引数に渡す値によって決まります。
例えば、次のようにopen()
関数を使用すると、ファイルから読み込んだテキストの改行コードはnewline
引数によって制御されます。
with open('textfile.txt', newline=None) as f:
text = f.read()
この場合、newline
引数がNone
なので、ファイルで使われている改行コード(「\n」、「\r」、「\r\n」のいずれか)を自動的に認識し、認識された改行コードは呼び出し元へ返す前に「\n」に変換されます。
同様に、ファイルへの書き込み時もnewline
引数で改行コードを制御できます。
with open('textfile.txt', 'w', newline=None) as f:
f.write('Hello, Python!')
この場合、書き出す文字列の「\n」は、システムデフォルトの改行コード(os.linesep
の値)へ変換されます。
まとめ
Pythonでファイルを読み書きする際の改行コードの扱いは、OSや状況によって異なるため、注意が必要です。しかし、Pythonのopen()
関数のnewline
引数を適切に使用することで、改行コードを柔軟に制御することが可能です。これにより、さまざまな環境でのファイル操作をスムーズに行うことができます。