YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

【コピペOK!】改行を削除するPythonスクリプト

pyhonでテキストファイルを読み込んだ時に、改行コード\nが残って困ってしまうことがありますね。

今回はテキストデータから改行コードを削除する方法を3つ紹介します。

  • 文字列の置換メソッド:replace()で削除
  • reモジュールの置換メソッド:re.subで削除
  • 文字列の末尾削除メソッド:rstrip()で削除

応用例として、クリップボードにコピーしたテキストから、改行コードを削除する効率化技も紹介しています。

改行コードの削除方法

改行を含むテキストデータを読み込むと、改行は改行コード"\n"として読み込まれます。

例えば、次のような改行のあるテキストファイルがあるとします。

'一行目'
'二行目'
''
'三行目'

このとき改行を明示的に\nで表現すると次のようになります。

'一行目\n'
'二行目\n'
'\n'
'三行目'

改行のあるファイルをそのまま読み込むと、次のように改行が\nとして読み込まれます。

with open("改行のあるテキスト.txt", "r", encoding="UTF-8") as f:
    text = f.read()

text
# '一行目\n二行目\n\n三行目'

状況によっては、この改行コード\nを削除したい場合がありますね。

今回は、この改行コートどの削除方法を次の2種類で紹介します。

  • テキスト全体から改行を一括削除
  • テキストを一行ずつ読みながら削除 次のような、改行のあるテキストファイルを例に実行例をみてみましょう。
'一行目\n'
'二行目\n'
'\n'
'三行目'

テキスト全体から改行を一括削除

一括で改行を削除する場合は、改行コード\nを空の文字列""で置換します。

pythonは置換の方法が豊富で、どれを使えばいいか困りますが、結果は同じなので好きな方法を選びましょう。

  • 文字列の置換メソッド:文字列.replace("\n", "")
  • reモジュールの置換メソッド:re.sub("\n", "", 文字列)

改行を削除するのでなく、空白の文字列に置換したい場合は、" "で置換すればOKです。

まずは、文字列の.replace()メソッドの実行例を紹介します。

# 改行を削除
text.replace("\n", "")
# '一行目二行目三行目'

# 改行を空白に変換
text.replace("\n", " ")
# '一行目 二行目  三行目'

次に、reモジュールre.sub()関数の実行例を紹介します。

import re

# 改行を削除
re.sub("\n", "", text)
# '一行目二行目三行目'

# 改行を削除
re.sub("\n", " ", text)
# '一行目 二行目  三行目'

一行ずつ読みながら改行処理

テキストファイルを一行ずつ読み込んで、末尾の改行を削除する例を紹介します。

末尾の改行を削除する場合は、文字列のメソッドrstrip()を使用すると良いですね

  • 文字列.rstrip(XXX)文字列の末尾のXXXを削除
    • 文字列.rstrip()のように引数を省略すると、末尾の空白を削除

改行を削除せずに一行ずつ読み込んでみます、

with open("改行のあるテキスト.txt", "r", encoding="UTF-8") as f:
    for line in f:
        print(repr(line)) # 改行の存在を見やすいようにreprで改行を"\n"で表現

# '一行目\n'
# '二行目\n'
# '\n'
# '三行目'

.rstrip(\n)で改行を削除しながら、一行ずつ読み込んでみます。

with open("改行のあるテキスト.txt", "r", encoding="UTF-8") as f:
    for line in f:
        print(repr(line.rstrip("\n"))) # 改行の存在が見やすいようにreprで改行を\nで表現
        
# '一行目'
# '二行目'
# ''
# '三行目'

続いて、read.lines()で行をリストで受け取った場合の改行処理を紹介します。

with open("改行のあるテキスト.txt", "r", encoding="UTF-8") as f:
    lines = f.readlines() # テキストファイルの改行を要素とするリストで読み込み

print(lines)
# ['一行目\n', '二行目\n', '\n', '三行目']

リスト内の要素が改行を持っているので、各要素のrstrip()メソッドを実行します。

各要素のメソッドを使用する場合は、次の2つの方法があります。

  • リスト内包表記で処理
  • map()関数で処理
# リスト内包表記で処理
[line.rstrip("\n") for line in lines]
# ['一行目', '二行目', '', '三行目']

# map()関数で処理
list(map(lambda l: l.rstrip("\n"), lines))
# ['一行目', '二行目', '', '三行目']

クリップボードのテキスト改行処理

pyperclipモジュールを使用すると、クリップボードのテキストをコピペできます。

これを応用すると、コピーしたテキストの改行を削除して、貼り付けという作業を半自動化することができます。

import pyperclip

# 例えば"一行目\n二行目"をコピーしているとする
src = pyperclip.paste() # クリップボードからテキスト読み込み
res = src.replace("\n","") # 改行削除
pyperclip.copy(res) # クリップボードにテキストを戻す

print(src)
# 一行目二行目

pyperclipモジュールの詳しい使い方は、次の記事で紹介しています。

≫pyperclipの使い方:おススメ置換の自動化スクリプト付き!
pyperclipの使い方を、おススメ実例付きで紹介します!pyperclipは、簡単に言うと、普段手作業で行っているコピペをpythonスクリプトに組み込んじゃおう!というモジュールです。非常にシンプルな機能ゆえに、応用しだいでは絶大な業務効率化の効果を発揮します!
www.yutaka-note.com/entry/pyperclip
 

Pythonで作業を効率化する方法

今回はipynbmarkdownに変換する方法を紹介しました。

pythonを使えば、簡単なスクリプトで作業を劇的に効率化することも可能です!

pythonの効率化関係で言えば、次の記事で紹介しているような本が自動化の本がおススメです。

≫【レビュー】退屈なことはPythonにやらせよう | 単純作業は自動化
名著「退屈なことはPythonにやらせよう 」をレビュー!単純作業を自動化して、自分が本当にしたいことのために時間を確保していこう!所要時間やできるようになったことを紹介!この本を参考にして作成した、自作自動化スクリプトも紹介しています!
www.yutaka-note.com/entry/python_jido
 
≫【レビュー】Python自動処理 全部入り。 | 即効性重視!Pythonによる自動化事例集!
今回は、Pythonの作業自動処理の解説本『Python自動処理全部入り』をレビュー!この本は、特定の作業に特化した即効性の重視の自動化解説本です。よくある作業から自動化しやすい作業を抽出して、それらの自動化を集中的に解説した本という印象です。本の中に自分のニーズに合った自動化処理が見つかれば、その日からすぐ使える事例集のような印象です。
www.yutaka-note.com/entry/python_jido_zenbu