Python文字列操作

Pythonで文字列処理する際に利用するトピックを記載します。

| 文字列の書き方

文字列はシングルクォート(‘)、または、ダブルクォート(“”)で囲むことで表現できます。
どちらを使っても違いはないですが、可読性を考えるとどちらかに統一した方が良いかと思います。

print('これは文字列です.')
print("これは文字列です.")

 

| 文字列長の取得

文字列の長さはlen()関数で取得できます。

# 文字列長取得サンプル.

target = 'datasize'
length = len(target)
print('{}の長さは{}です。'.format(target, length))

出力結果

datasizeの長さは8です。

 

| 文字列一致判定

文字列の一致判定は「==」で可能です。

def execute(command):
    if command == 'insert':
        print('データを挿入します')
    else:
        print('データを削除します')

execute('insert')
execute('delete')

出力結果

データを挿入します
データを削除します

 

| 文字列の改行

文字列にトリプルクォート(”’)を使うと、囲まれた文字列は改行されても一文字として扱います。

stringData = \
'''
+--------------------------------+
|  Print Table                   |
+--------------------------------+
'''
print(stringData)

出力結果

+--------------------------------+
|  Print Table                   |
+--------------------------------+

 

| 文字列のコンソール表示

文字列をコンソール上に表示する場合はprint()関数を使います。
文字列をフォーマットして、書く方法は次の2通りあります。
「%」の方は、空白をはさむ必要があるので注意です。

# printサンプル
command = 'コマンド'
print('これは\t「{}」\tです\n'.format(command))
print('これは\t「%s」\tです\n' %(command))

「\t」は、タブを示すエスケープシーケンスです。
「\n」は、改行を示すエスケープシーケンスです。
print()関数は、デフォルトで改行が入ります。

出力結果

これは  「コマンド」    です
 
これは  「コマンド」    です
 

 

| 文字列のコンソール入力

コンソール経由でキーボードから文字列を取得する(文字列入力を待つ)場合は、input()関数を使います。input()を呼び出すと、キーボードからの入力を待ち受けます。

次の処理には、何かしら入力されるまでは移行しません。

# キーボード入力待ちサンプル.
print('コマンドを入力してください: ')
command = input()
print('入力コマンドは{}です'.format(command))

 

| 文字列の結合

文字列結合は、「+」を使えば可能です。

# 文字列結合のサンプル.
str1 = 'ABC'
str2 = 'DEF'
str3 = str1 + str2
print(str3) # 結果: ABCDEF

str4 = str1 * 3
print(str4) # 結果: ABCABCABC

 

| 文字列スライス

文字列の一部の文字列を切り出す場合は、ブラケット記号([])でコロン(:)を指定することで可能です。

これにより、ある文字列から特定の位置の文字列を抽出(切り出す)することができます。

文字列は0はじまりのため、str[0]が1文字目を示すことに注意です。また、最後尾はstr[-1]で示されます。

# 文字列切り出しサンプル.
strData = 'pumopumo@xxx.com'
print('1: {}'.format( strData[0] ))     # 先頭文字を切り出す.
print('2: {}'.format( strData[1] ))     # 2文字目を切り出す
print('3: {}'.format( strData[-1] ))    # 末尾の文字を切り出す
print('4: {}'.format( strData[9:] ))    # 10文字目から最後まで切り出す
print('5: {}'.format( strData[:8] ))    # 9文字目よりも前の文字列を切り出す
print('6: {}'.format( strData[4:8] ))   # 5-9文字目までを切り出す
print('7: {}'.format( strData[-3:] ))   # 末尾から3文字目~末尾までを切り出す
print('8: {}'.format( strData[0:8:2] )) # 1-9文字までを2文字毎切り出す(3個目はステップ)

出力結果

1: p
2: u
3: m
4: xxx.com
5: pumopumo
6: pumo
7: com
8: pmpm

※ インデックスは最大文字数 – 1まで。
※ -1は末尾を示す。-3とすると末尾から3文字目を示す。

 

| 文字列のエンコード・デコード

Python3では、文字列はUnicode文字列として扱われるため、バイナリ型(byte)とは区別されます。

ネットワークで文字列データを送信する場合などに文字列をバイナリ型(byte)に変換する必要があります。そうした場合は、下記のように文字列をバイナリに変換します。

※ bytesと文字列は「+」などで連結できません。

# 文字列のエンコード/デコードサンプル.

stringData = 'こんにちは'

# 文字列をバイナリにエンコード.
encodeData = stringData.encode('utf-8') # UTF-8をバイナリエンコード.
print('encodeData = {}'.format(encodeData))

# 文字列をバイナリからデコード.
decodeData = encodeData.decode('utf-8') # バイナリをutf-8にデコード.
print('decodeData = {}'.format(decodeData))

出力結果

encodeData = b'\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf'
decodeData = こんにちは

 

| その他の文字列操作まとめ

文字列操作でよく使う各種関数をまとめます。

 

文字列を分割する場合は「split()」を使います。

# 文字列を「/」で区切る
sampleStr = 'pumo/pumo/design/thinking'
splitList = sampleStr.split('/')
print(splitList)    # ['pumo', 'pumo', 'design', 'thinking']

 

文字列を連結する場合は「join()」を使います。

# list文字列を「*」で連結する
joinStr = '*'.join(splitList)
print(joinStr)      # pumo*pumo*design*thinking

 

文字列の置換は「replace()」を使います。

# 第1引数を第2引数に1回書き換える
replaceStr = joinStr.replace('pumo','mopu', 1) 
print(replaceStr)   # mopu*pumo*design*thinking

 

文字列の先頭や末尾が特定の文字か否かを確認するには「startswith()」「endswith()」を使います。

# 文字列の開始・終了判断に使える関数
# 開始文字が一致していればTrue
result1 = joinStr.startswith('p')
result2 = replaceStr.startswith('p') 
print(result1)  # True
print(result2)  # False
# 末尾文字が一致していればTrue
result1 = joinStr.endswith('g') 
result2 = replaceStr.endswith('h') 
print(result1)  # True
print(result2)  # False

 

文字列が数字か否かを確認するには「isalnum()」を使います。「@」などの記号は数字ではないと判定されます。

# 数字チェック 数字だとTrue、@などはFalse
numStr1 = '012345'
numStr2 = '01234@'
numStr3 = '!12345'
result1 = numStr1.isalnum()
result2 = numStr2.isalnum()
result3 = numStr3.isalnum()
print(result1)  # True
print(result2)  # False
print(result3)  # False

 

ある文字列の中に指定の文字や文字列が何回出現するかをカウントするには「count()」を使います。

# 文字の出現回数取得.
countStr = 'pumopumo-design'
count1 = countStr.count('p')     # aの出現回数
count2 = countStr.count('o')     # oの出現回数
count3 = countStr.count('-')     # -の出現回数
count4 = countStr.count('i')     # iの出現回数
count5 = countStr.count('a')     # aの出現回数
count6 = countStr.count('pumo')  # pumoの出現回数
count7 = countStr.count('design')# pumoの出現回数
print(count1)   # 2
print(count2)   # 2
print(count3)   # 1
print(count4)   # 1
print(count5)   # 0
print(count6)   # 2
print(count7)   # 1

 

ある文字列の中に指定の文字や文字列のインデックスを取得する場合は「find()」を使います。インデックスは「0」はじまりです。文字列の中に指定の文字や文字列が存在しない場合は「-1」を返します。

# 文字列の出現インデックス取得
indexStr = 'pumopumo@xxx.com'
index1 = indexStr.find('@')     # @の出現インデックスを返却
index2 = indexStr.find('pumo')  # pumoの出現インデックスを返却
index3 = indexStr.find('.')     # .の出現インデックスを返却
index4 = indexStr.find('com')   # comの出現インデックスを返却
index5 = indexStr.find('m')     # mの出現インデックスを返却
index6 = indexStr.find('a')     # aの出現インデックスを返却(文字なし)
print(index1)   # 8
print(index2)   # 0
print(index3)   # 12
print(index4)   # 13
print(index5)   # 2
print(index6)   # -1(存在しない場合)

 

文字列の大文字/小文字を変換する場合、大文字への変換は「upper()」、小文字への変換は「lower()」を使います。

# 大文字小文字変換
convertStr = "Pumo Pumo Design Thinking."
upperStr = convertStr.upper()
lowerStr = convertStr.lower()
print(upperStr) # PUMO PUMO DESIGN THINKING.
print(lowerStr) # pumo pumo design thinking.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です