Python3 文字列

文字列は Python で最もよく使われるデータ型です。引用符(' 或 ")で文字列を作成します。

文字列の作成はとても簡単で、変数に値を代入するだけです。例:

var1 = 'Hello World!' var2 = "サンプル"

Python で文字列の値にアクセスする

Python は単一文字型をサポートしていません。単一文字も Python では文字列として扱われます。

Python で部分文字列にアクセスするには、角括弧を使用して[]文字列を切り出します。文字列の切り出しの構文は次のとおりです。

変数[先頭インデックス:末尾インデックス]

インデックス値は0を開始値とし、-1は末尾からの開始位置です。

以下の例のとおりです。

例(Python 3.0+)

#!/usr/bin/python3 var1 = 'Hello World!' var2 = "サンプル" print ("var1[0]: ", var1[0]) print ("var2[1:5]: ", var2[1:5])

上記の例の実行結果:

var1[0]:  H
var2[1:5]:  unoo

Python の文字列更新

文字列の一部を切り出して他のフィールドと連結することができます。以下の例のとおりです。

例(Python 3.0+)

#!/usr/bin/python3 var1 = 'Hello World!' print ("更新された文字列:", var1[:6] + 'サンプル!')

上記の例の実行結果

已更新字符串 :  Hello サンプル!

Python のエスケープ文字

文字に特殊文字を使用する必要がある場合、Python ではバックスラッシュを\エスケープ文字として使用します。次の表のとおりです。

エスケープ文字説明例
\(行末の場合) 継続行記号
>>> print("line1 \
... line2 \
... line3")
line1 line2 line3
>>> 
\\ バックスラッシュ記号
>>> print("\\")
\
\' シングルクォート
>>> print('\'')
'
\" ダブルクォート
>>> print("\"")
"
\a ベル
>>> print("\a")
実行するとパソコンが音を発します。
\b バックスペース
>>> print("Hello \b World!")
Hello World!
\000 空
>>> print("\000")

>>> 
\n 改行
>>> print("\n")


>>>
\v 垂直タブ
>>> print("Hello \v World!")
Hello 
       World!
>>>
\t 水平タブ
>>> print("Hello \t World!")
Hello      World!
>>>
\r 復帰、後続の内容を\r文字列の先頭に移動し、先頭部分の文字を一つずつ置き換え、最終的に\r後続の内容が完全に置き換わるまで。
>>> print("Hello\rWorld!")
World!
>>> print('google サンプル taobao\r123456')
123456 サンプル taobao
\f 改ページ
>>> print("Hello \f World!")
Hello 
       World!
>>> 
\yyy 8進数。y は 0〜7 の文字を表します。例: \012 は改行を表します。
>>> print("\110\145\154\154\157\40\127\157\162\154\144\41")
Hello World!
\xyy 16進数。\x で始まり、y は文字を表します。例: \x0a は改行を表します。
>>> print("\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21")
Hello World!
\other その他の文字は通常の形式で出力します。  

を使用して\r パーセント進捗を実現します:

例

import time

for i in range(101): # プログレスバーの図形とパーセンテージを追加
    bar = '[' + '=' * (i // 2) + ' ' * (50 - i // 2) + ']'
    print(f"\r{bar} {i:3}%", end='', flush=True)
    time.sleep(0.05)
print()

以下の例では、さまざまなエスケープ文字を使用して、シングルクォート、改行、タブ、バックスペース、改ページ、ASCII、2進数、8進数、16進数の効果を示しています。

例

print('\'Hello, world!\'')  # 出力:'Hello, world!'

print("Hello, world!\nHow are you?")  # 出力:Hello, world!
                                        #       How are you?

print("Hello, world!\tHow are you?")  # 出力:Hello, world! How are you?

print("Hello,\b world!")  # 出力:Hello world!

print("Hello,\f world!")  # 出力:
                           # Hello,
                           #  world!

print("A に対応する ASCII 値は:", ord('A'))  # 出力:A に対応する ASCII 値は: 65

print("\x41 は A の ASCII コードです")  # 出力:A は A の ASCII コードです

decimal_number = 42
binary_number = bin(decimal_number)  # 10進数を2進数に変換
print('2進数に変換:', binary_number)  # 2進数に変換: 0b101010

octal_number = oct(decimal_number)  # 10進数を8進数に変換
print('8進数に変換:', octal_number)  # 8進数に変換: 0o52

hexadecimal_number = hex(decimal_number)  # 10進数を16進数に変換
print('16進数に変換:', hexadecimal_number) # 16進数に変換: 0x2a

Python の文字列演算子

次の表の例では、変数 a の値は文字列 "Hello"、変数 b の値は "Python" です。

演算子説明例
+文字列連結a + b の出力結果: HelloPython
*文字列を繰り返し出力a*2 の出力結果: HelloHello
[]インデックスによる文字列内の文字の取得ae
[ : ]文字列の一部を切り出します。左閉右開の原則により、str[0:2] は3番目の文字を含みません。a[1:4] の出力結果ell
inメンバー演算子 - 文字列が指定された文字を含む場合に True を返す 'H' in a出力結果 True
not in メンバー演算子 - 文字列が指定された文字を含まない場合に True を返す 'M' not in a出力結果 True
r/R生文字列 - 生文字列: すべての文字列は文字どおりの意味で直接使用され、特殊文字や印刷できない文字をエスケープすることはありません。 生文字列は、文字列の最初の引用符の前に文字を付けることを除いて、r(大文字小文字は問いません)を除き、通常の文字列とほぼ完全に同じ構文です。
print( r'\n' )
print( R'\n' )
%フォーマット文字列次のセクションを参照してください。

例(Python 3.0+)

#!/usr/bin/python3 a = "Hello" b = "Python" print("a + b の出力結果:", a + b) print("a * 2 の出力結果:", a * 2) print("a", a[1]) print("a[1:4] の出力結果:", a[1:4]) if( "H" in a) : print("H は変数 a に含まれています") else : print("H は変数 a に含まれていません") if( "M" not in a) : print("M は変数 a に含まれていません") else : print("M は変数 a に含まれています") print (r'\n') print (R'\n')

上記の例の出力結果は次のとおりです。

a + b 输出结果: HelloPython
a * 2 输出结果: HelloHello
a[1] 输出结果: e
a[1:4] 输出结果: ell
H 在变量 a 中
M 不在变量 a 中
\n
\n

Python の文字列フォーマット

Python はフォーマット済み文字列の出力をサポートしています。非常に複雑な式を使うこともありますが、最も基本的な使い方は、文字列フォーマット指定子 %s を含む文字列に値を挿入することです。

Python では、文字列フォーマットは C の sprintf 関数と同じ構文を使用します。

例(Python 3.0+)

#!/usr/bin/python3 print ("私の名前は %s、今年 %d 歳です!" % ('小明', 10))

上記の例の出力結果:

我叫 小明 今年 10 岁!

python 文字列フォーマット指定子:

記号 説明
      %c文字とそのASCIIコードをフォーマット
      %s文字列をフォーマット
      %d整数をフォーマット
      %u符号なし整数をフォーマット
      %o符号なし8進数をフォーマット
      %x符号なし16進数をフォーマット
      %X符号なし16進数(大文字)をフォーマット
      %f浮動小数点数をフォーマットし、小数点以下の精度を指定できます
      %e科学的記数法で浮動小数点数をフォーマット
      %E%e と同じ働きで、科学的記数法で浮動小数点数をフォーマット
      %g%f と %e の省略形
      %G%f と %E の省略形
      %p変数のアドレスを16進数でフォーマット

フォーマット演算子の補助指令:

記号機能
*幅または小数点精度を定義
-左揃えに使用
+正の数の前にプラス記号( + )を表示
<sp>正の数の前に空白を表示
#8進数の前にゼロ('0')を表示し、16進数の前に'0x'または'0X'を表示します('x'か'X'かによって異なります)
0表示される数字の前に、デフォルトの空白ではなく'0'を埋めます
%'%%' は単一の'%'を出力します
(var)変数のマッピング(辞書パラメータ)
m.n.m は表示される最小の全体幅で、n は小数点以下の桁数(利用可能な場合)です。

Python2.6 から、新しい文字列フォーマット関数が追加されました。str.format()これは文字列フォーマットの機能を強化します。


Python のトリプルクォート

Python のトリプルクォートを使用すると、文字列を複数行にわたって記述でき、改行、タブ、その他の特殊文字を含めることができます。例は次のとおりです。

例(Python 3.0+)

#!/usr/bin/python3 para_str = """これは複数行文字列の例です 複数行文字列はタブ文字を使用できます TAB (\t)。 改行文字 [ も使用できます。\n ]。 """ print (para_str)

上記の例の実行結果は次のとおりです:

这是一个多行字符串的实例
多行字符串可以使用制表符
TAB (    )。
也可以使用换行符 [ 
 ]。

トリプルクォートは、プログラマーを引用符や特殊文字の泥沼から解放し、常に小さな文字列ブロックをそのままの形式で保持できる、いわゆるWYSIWYG(見たままが得られる)形式です。

典型的な使用例としては、HTML または SQL の一塊が必要な場合です。このとき、文字列の組み合わせや特殊文字のエスケープは非常に煩雑になります。

errHTML = ''' <HTML><HEAD><TITLE> Friends CGI Demo</TITLE></HEAD> <BODY><H3>ERROR</H3> <B>%s</B><P> <FORM><INPUT TYPE=button VALUE=Back ONCLICK="window.history.back()"></FORM> </BODY></HTML> ''' cursor.execute(''' CREATE TABLE users ( login VARCHAR(8), uid INTEGER, prid INTEGER) ''')

f-string

f-string は python3.6 以降のバージョンで追加されたもので、リテラルフォーマット文字列と呼ばれ、新しい文字列フォーマットの構文です。

以前はパーセント記号 (%) を使うのが慣例でした:

例

>>> name = 'サンプル'
>>> 'Hello %s' % name
'Hello サンプル'

f-stringフォーマット文字列はf先頭の文字で始まり、その後に文字列が続きます。文字列内の式は波括弧 {} で囲み、変数や式を計算した値に置き換えます。例は次のとおりです:

例

>>> name = 'サンプル'
>>> f'Hello {name}'  # 変数を置換
'Hello サンプル'
>>> f'{1+2}'         # 式を使用
'3'

>>> w = {'name': 'サンプル', 'url': 'www.example.com'}
>>> f'{w["name"]}: {w["url"]}'
'サンプル: www.example.com'

この方法を使うと明らかに簡単になり、%s を使うか %d を使うかを判断する必要がなくなります。

Python 3.8 のバージョンでは、=記号を使用して演算式と結果を連結できます:

例

>>> x = 1
>>> print(f'{x+1}')   # Python 3.6
2

>>> x = 1
>>> print(f'{x+1=}')   # Python 3.8
x+1=2

Unicode 文字列

Python2 では、通常の文字列は8ビットASCIIコードで格納され、Unicode文字列は16ビットUnicode文字列として格納されるため、より多くの文字セットを表すことができます。使用する構文は、文字列の前にプレフィックスを付けることです。u。

Python3 では、すべての文字列はUnicode文字列です。


Python の文字列組み込み関数

Python の文字列でよく使われる組み込み関数は次のとおりです:

番号メソッドと説明
1

capitalize()
文字列の最初の文字を大文字に変換します。

2

center(width, fillchar)

指定された幅 width で中央揃えされた文字列を返します。fillchar は埋める文字で、デフォルトはスペースです。
3

count(str, beg= 0,end=len(string))


string 内で str が出現する回数を返します。beg または end を指定すると、指定範囲内で str が出現する回数を返します。
4

bytes.decode(encoding="utf-8", errors="strict")


Python3 には decode メソッドはありませんが、bytes オブジェクトの decode() メソッドを使用して、指定された bytes オブジェクトをデコードできます。この bytes オブジェクトは str.encode() でエンコードして取得できます。
5

encode(encoding='UTF-8',errors='strict')


encoding で指定されたエンコード形式で文字列をエンコードします。エラーが発生した場合、デフォルトでは ValueError 例外が発生します。ただし、errors に 'ignore' または 'replace' が指定されている場合は除きます。
6

endswith(suffix, beg=0, end=len(string))
文字列が suffix で終わっているかどうかを確認します。beg または end を指定すると、指定された範囲内で suffix で終わっているかを確認し、そうであれば True を返し、そうでなければ False を返します。

7

expandtabs(tabsize=8)


文字列 string 内のタブ記号をスペースに変換します。タブ記号のデフォルトのスペース数は 8 です。
8

find(str, beg=0, end=len(string))


str が文字列に含まれているかどうかを検出します。範囲 beg と end を指定すると、指定範囲内に含まれているかを確認し、含まれていれば開始インデックス値を返し、そうでなければ -1 を返します。
9

index(str, beg=0, end=len(string))


find() メソッドと同じですが、str が文字列内にない場合に例外を発生させます。
10

isalnum()


文字列が英数字で構成されているかどうかを確認します。つまり、文字列内のすべての文字が英字または数字であるかどうかです。文字列に少なくとも1文字あり、すべての文字が英字または数字である場合は True を返し、それ以外の場合は False を返します。
11

isalpha()


文字列に少なくとも1文字あり、すべての文字が英字または中国語の文字である場合は True を返し、 それ以外の場合は False を返します。
12

isdigit()


文字列が数字のみを含む場合は True を返し、そうでなければ False を返します。
13

islower()


文字列に少なくとも1つの大文字と小文字を区別する文字が含まれており、それらすべての(大文字と小文字を区別する)文字が小文字である場合は True を返し、そうでなければ False を返します。
14

isnumeric()


文字列が数字文字のみを含む場合は True を返し、そうでなければ False を返します。
15

isspace()


文字列が空白のみを含む場合は True を返し、そうでなければ False を返します。
16

istitle()


文字列がタイトルケース化されている場合(title() を参照)は True を返し、そうでなければ False を返します。
17

isupper()


文字列に少なくとも1つの大文字と小文字を区別する文字が含まれており、それらすべての(大文字と小文字を区別する)文字が大文字である場合は True を返し、そうでなければ False を返します。
18

join(seq)


指定された文字列を区切り文字として、seq 内のすべての要素(の文字列表現)を連結して新しい文字列にします。
19

len(string)


文字列の長さを返します。
20

ljust(width[, fillchar])


元の文字列を左寄せにし、fillchar を使用して長さ width まで埋めた新しい文字列を返します。fillchar のデフォルトはスペースです。
21

lower()


文字列内のすべての大文字を小文字に変換します。
22

lstrip()


文字列の左側のスペースまたは指定された文字を削除します。
23

maketrans()


文字マッピングの変換テーブルを作成します。2つの引数を受け取る最も簡単な呼び出し方では、最初の引数は変換する文字を表す文字列、2番目の引数も変換先を表す文字列です。
24

max(str)


文字列 str の中で最大の文字を返します。
25

min(str)


文字列 str の中で最小の文字を返します。
26

replace(old, new [, max])


文字列内の old を new に置き換えます。max が指定されている場合は、置き換えは max 回を超えません。
27

rfind(str, beg=0,end=len(string))


find() 関数に似ていますが、右側から検索を開始します。
28

rindex( str, beg=0, end=len(string))


index() に似ていますが、右側から始めます。
29

rjust(width,[, fillchar])


元の文字列を右寄せにし、fillchar(デフォルトはスペース)を使用して長さ width まで埋めた新しい文字列を返します。
30

rstrip()


文字列の末尾のスペースまたは指定された文字を削除します。
31

split(str="", num=string.count(str))


str を区切り文字として文字列を分割します。num に指定値がある場合は、num+1 個の部分文字列のみを切り出します。
32

splitlines([keepends])


行('\r', '\r\n', \n')で分割し、各行を要素として含むリストを返します。引数 keepends が False の場合は改行文字を含めず、True の場合は改行文字を保持します。
33

startswith(substr, beg=0,end=len(string))


文字列が指定された部分文字列 substr で始まるかどうかを確認し、そうであれば True を返し、そうでなければ False を返します。beg と end の指定値がある場合は、指定範囲内で確認します。
34

strip([chars])


文字列に対して lstrip() と rstrip() を実行します。
35

swapcase()


文字列内の大文字を小文字に、小文字を大文字に変換します。
36

title()


「タイトルケース化」された文字列を返します。つまり、すべての単語が大文字で始まり、残りの文字は小文字です(istitle() を参照)。
37

translate(table, deletechars="")


table で指定されたテーブル(256 文字を含む)に基づいて string の文字を変換します。 フィルタリングして除外する文字は deletechars パラメータに指定します。
38

upper()


文字列内の小文字を大文字に変換します。
39

zfill (width)


長さ width の文字列を返します。元の文字列は右寄せで、前を 0 で埋めます。
40

isdecimal()


文字列が10進文字のみを含むかどうかを確認し、そうであれば true を返し、そうでなければ false を返します。
その他の拡張