ユーニックス総合研究所

  • home
  • archives
  • python-newlines

Pythonで改行を書く方法をわかりやすく解説

  • 作成日: 2021-02-18
  • 更新日: 2023-12-24
  • カテゴリ: Python

Pythonで改行を書く方法

プログラミング言語のPythonでは文字列の中に改行(かいぎょう)を書くことができます。
改行を書くことで文章の中に段落を作り、文章を読みやすくすることができます

また、レコードを改行で区切って、一行ずつ読み込んで処理させるなどといったテキスト処理も出来るようになります。

この記事では改行の種類とPythonにおける改行の書き方を解説します。
具体的には↓を見ていきます。

  • 改行とは?
  • 改行コードの種類
  • どの改行を使えばいいのか?
  • Pythonにおける改行の書き方
  • Pythonによる改行の処理

改行とは?

改行(かいぎょう)とは改行コードのことを言います。
改行コードとは「改行を行うコード」のことをいいます。

たとえば↓の文章を見てください。

犬も歩いた。棒に当たった。  

↑の文章の中で「犬も歩いた。」の後に改行コードを入れると文章は↓のような表示になります。

犬も歩いた。  
棒に当たった。  

このように改行を使うと、文章の「行」を増やすことができます。

🦝 < 「行を改める」で改行なわけね

この改行コードはプログラミングの中で、開発者が自分の手でテキストに挿入することができます。
そのさい、改行コードには「\n」や「\r\n」などの決まった文字があるのでこれを使います。

改行コードの種類

1言に改行と言っても実は大きく分けて改行は3つの種類があります。
どれも役割は文章の中で行を増やすことです。
その3つとは↓のようなものです。

  • CR (Carriage Return) ... \r
  • LR (Line Feed) ... \n
  • CRLF (Carriage Return + Line Feed) ... \r\n

なぜ3つも改行の種類があるのかと言うと、これはOSによって違うからです。
代表的なOS(Windows, Mac, UNIXなど)はそれぞれ独自の進化を遂げてきました。
その中で改行の扱いもOSによって違います。
そのためOSによってデフォルトで扱っている改行が異なるのです。

たとえばWindowsではCRLFがデフォルトです。MacではCR, UNIXではLFです。
改行はどれもテキスト中の行を増やすのが目的ですが、環境によってこんなに違いがあるわけですね。

開発者の仕事の1つにこの改行への対応があげられます。
プログラマーさんなどはこれらの複数の改行に対応するコードを書き、環境の違いを吸収します。
そうすることでWindows, Mac, UNIXのいずれでも動かせるソフトウェアを作ることが可能になるわけです。

一般の人はあまりこの改行の違いについて意識する必要はありませんが、特にテキスト処理を行うソフトウェアを作る場合は、この複数の改行への対応は必須と言えるかもしれません。

CR (Carriage Return)

CRは「キャリッジ・リターン」の略です。
MacOS 9以前のMacでよく使われる改行です。
改行コードは↓のように書きます。

\r  

CRはWindows, UNIX系OSでは改行とは違う動作をするので注意してください
CRはWindows, UNIX系OSでは出力位置を行頭に移動する動作をします。

LF (Line Feed)

CRは「ライン・フィード」の略です。
UNIX, LinuxなどのOSで一般的な改行です。
改行コードは↓のように書きます。

\n  

CRLF (Carriage Return + Line Feed)

CRLFはCRとLFを組み合わせた改行です。
Windowsで一般的に使われます。
改行コードは↓のように書きます。

\r\n  

どの改行を使えばいいのか?

プロジェクトでは改行は統一させるようにしましょう。
そうしないとCR, LF, CRLFなどの改行が入り乱れてカオスになります。
Web系の開発では改行はUNIX系のLFに統一するのが一般的です。

またMacOS X以降はCRではなくLFが一般的なので、新規プロジェクトではCRに統一する必要性も薄いかもしれません。
特に改行にこだわりがない場合はLFに統一させるのがいいでしょう。
私も自分のプロジェクトの多くはLFで統一させています。

Pythonにおける改行の書き方

Pythonでは「\r」「\n」「\r\n」などの改行コードを文字列の中に含ませることができます。
たとえば↓のようにです。

'犬も歩いた。\n棒に当たった。'  

↑の文字列をprint()などで出力します。

s = '犬も歩いた。\n棒に当たった。'  
print(s)  

↑のコードの出力結果は↓のようになります。

犬も歩いた。  
棒に当たった。  

改行は↓のように複数挿入することができます。

s = '犬も\n歩いた。\n\n棒に\n当たった。'  
print(s)  

↑のコードを実行すると↓のような結果になります。

犬も  
歩いた。  

棒に  
当たった。  

Pythonによる改行の処理

Pythonによる改行処理の一例をご紹介します。

CRLFをLFに変換

テキストの中のCRLFをLFに変換するには↓のような処理を書きます。

a = 'A\r\nB\r\nC\r\n'  # CRLFを含むテキスト  
b = a.replace('\r\n', '\n')  # CRLFをLFに置き換え  
print(b)  

↑のコードを実行すると↓のような結果になります。

A  
B  
C  

改行でテキストを分割

文字列のsplit()メソッドを使えば↓のようにテキストを改行で分割できます。

s = 'abc\ndef\nghi'  # 改行を含んだテキスト  
words = s.split('\n')  # 改行で分割  
print(words)  

↑のコードを実行すると↓のような結果になります。

['abc', 'def', 'ghi']  

改行コードをパースする

改行コードをパースするサンプルです。
↓のコードではCR, LF, CRLFの改行がパース中に見つかったら、それらの改行をLFに置き換えます。

src = 'a\nb\r\nc\r'  
dst = ''  

i = 0  
while i < len(src):  
    if (i < len(src) - 1 and src[i] == '\r' and src[i + 1] == '\n'):  
        dst += '\n'  
        i += 1  
    elif src[i] == '\n' or src[i] == '\r':  
        dst += '\n'  
    else:  
        dst += src[i]  
    i += 1  

print(dst)  

↑のコードを実行すると↓のような結果になります。

a  
b  
c  

おわりに

今回はPythonで改行を扱う方法について見てきました。
改行は意外と環境の違いがややこしく、めんどくさいところです。
改行をうまく処理できるようになればテキスト処理のスキルが1つ上がるでしょう。

🦝 < 文章を改行して読みやすく