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?

More than 1 year has passed since last update.

Pythonで文字列加工「余計な空白文字を取り除く」

Last updated at Posted at 2023-09-02

前書き

Pythonで文字列を扱っていると余計な空白文字がやたら並んでいる文章に遭遇して、その後の処理で困ることがありました。

例)「I have a   pen.」

この記事では、apen.の間にある余計な空白文字を取り除き、I have a pen.のように整った文字列に組み直すコードを共有したいと思います。

追記:
個人的に「これはうまくできたな」と思うコードを、『Pythonで文字列加工』と題して記事に残そうという思いで書いています。(シリーズ化するかは未定......)

もっと良い方法があればどんどんツッコミもらえると嬉しいです!

開発環境

Google Colaboratory

本題

' '.join([i for i in text.split(' ') if i != ''])

上記が、前書きで説明した文字列加工を実現するためのコードである。

このコードのポイントとしては内包表記、文字列メソッドjoin()split()の3つ

以降に処理の流れを、順を追って説明する。

手順①

まずは、空白文字とそれ以外を分けて考える。

そこで、split()を用いる。splitの引数には' '(半角スペース)を指定する。

text = "I have a    pen." # 例:「a」と「pen.」の間にのみ余計な空白文字が存在している。

print(text.split(' '))
# 出力
# ['I', '', 'have', '', 'a', '', '', '', '', 'pen.']

手順②

空白文字を基準に分割された文字列がリスト型として取得できたら、これらを一つひとつif文に掛ける。

このとき、条件式に''を除くような指定を行うことで、空白文字を除いた要素のみが残る。

str_list = []

for i in text.split():
  if i != '':
    str_list.append(i)
  else:
    continue
print(str_list)
# 出力
['I', 'have', 'a', 'pen.']

手順③

空白文字を除いた要素のみのリストが取得出来たら、最後はそれらを元の文字列へと、ひとまとめにする。

ここでjoin()を使う。

リストを引数に、その要素は' 'で連結される。

print(' '.join(str_list))
# 出力
# I have a pen.

以上が処理の流れの説明である。

内包表記の利用について

内包表記を利用することで上記手順に記載のコードを1行にまとめることができますが、内包表記の詳しい説明については、ここでは割愛します。

使用例

text = "I have a    pen."
text = ' '.join([i for i in text.split(' ') if i != ''])
print(text)
# 出力
# I have a pen.

終わりに

最近は卒論の研究活動はじめ、Pythonを触ることのほうが多くなってしまい、Webアプリ開発の勉強にまったく手が回せていないです。1日がもっと長い時間あれば......

密かに計画していた月いち更新も半年を迎えたところで途絶えてしまいましたT_T
が、ここで投げ出すことはしないよう頑張ります!

学生生活も残りわずかとなりましたが、卒業は確定ではないので気を引き締めて残りの期間も駆け抜けたいと思います。

0
0
3

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?