文字列 (文字列、バイト)

4.3 文字列 (文字列、バイト)

4.3.1 文字列の事前知識

4.3.1.1 文字列の概念

文字列は一連の文字で構成されており、文字とは、国文字、句読点、図形記号、数字など、さまざまな文字や記号の総称です。文字列は、プログラミング言語でテキストを表すデータ型です。
文字列は、個々の要素 (文字) で構成されます。このような要素が連続したデータで構成されており、Python 言語ではこの特徴を持つデータをシーケンスと呼び、中国語に翻訳し序列ます。シークエンスについては、以下のコンテンツで詳しく紹介していきます。

4.3.1.2 文字セット

文字セットは、複数の文字の集まりです。文字セットには多くの種類があります。各文字セットには、異なる数の文字が含まれています。一般的な文字セットには、ASCII 文字セット、GB2312 文字セット、BIG5 文字セット、GB18030 文字セット、Unicode 文字が含まれます待機を設定します。
簡単に言えば、文字セットはテーブルであり、文字と ID の対応表です。

4.3.1.3 文字のエンコードとデコード

コンピュータは数値しか処理できないため、テキストを処理する場合は、まずテキストを数値に変換してから処理する必要があります。初期のコンピューターは、設計時に 8 ビット (ビット、別名) をバイト (バイト) として使用していたため、1 バイトで表現できる最大の整数は 255 (バイナリ 11111111 = 10 進数 255) です。整数、さらにバイトを使用する必要があります。たとえば、2 バイトで表現できる最大の整数は 65535 であり、4 バイトで表現できる最大の整数は 4294967295 です。
コンピュータに保存されている情報は 2 進数で表現されており、画面に表示されている英語や漢字などの文字は 2 進数に変換された結果です。
平たく言えば、a何を使って表現するかなど、一定の規則に従って文字をコンピュータに格納することを といい编码、逆に、コンピュータに格納された 2 進数を文字に分解して表示することを解码、暗号化や暗号化のようにと呼びます。暗号解読。
デコード プロセス中に、間違ったデコード ルールが使用されると、対象の文字が別の文字に解析されたり、文字化けしたりします。

4.3.1.3.1 コーディング開発の歴史

アメリカ人はコンピューターを発明し、8つの0と1の組み合わせを使って英語の文字を1つずつ対応させ、テーブル、ASCIIテーブルを作りました。それが有名な ASCII 文字セットです。
ASCII 文字セットには、主に制御文字 (Enter キー、バックスペース、改行など)、表示可能な文字 (英語の大文字と小文字、アラビア数字、西洋記号) が含まれます。
コンピュータが中国に導入されました. 中国には広大な国土と資源があり, 伝統的な文字や簡略化された文字がたくさんあります. 8 ビットバイトは最大 256 文字を表すことができます. これは人々の日常業務のニーズを満たすことができません. したがって, ASCII が拡張され、新しい文字セットは GB2312 と呼ばれます。その後、GB2312 では不十分であることが判明し、拡張後に GB18030 が形成されました。
中国のように、国ごとに独自の言語コードが設定されているため、さまざまなコードが表示されますが、対応するコードをインストールしないと、正しくデコードして正しいコンテンツを表示することができません。
各国の暗号化のため、国際通信はできません。国際機関が共同でコード UNICODE (Universal Multiple-Octet Coded Character Set) を作成しました。これは、すべての文字が固定された 2 バイトで表され、すべての文字が 2 バイトのみであり、コンピューターが認識しやすいことを規定しています。
UNICODE は互いに争う問題を解決しましたが、アメリカの元の ASCII は 1 バイトしか必要としないため、アメリカ人は乗り気ではありません。UNICODE エンコーディングは彼らの言語にもう 1 バイト追加し、無駄に 1 バイトの記憶域を浪費します。交渉の結果、UTF(Unicode変換形式)であるユニバーサル変換形式と呼ばれる新しい変換形式が登場しました。一般的なものは UTF-8 と UTF-16 です。UTF-8 では、アメリカ文字は 1 バイト、ヨーロッパ文字は 2 文字、東南アジア文字は 3 文字と規定されています。

4.3.1.3.2 ASCII エンコーディング

ASCII (American Standard Code for Information Interchange) は、ラテン アルファベットに基づくコンピュータ コーディング システムです。主に現代英語を表示するために使用されますが、拡張バージョンの EASCII は他の西ヨーロッパ言語を表示できます。これは、現在使用されている最も一般的なシングルバイト エンコーディング システムです。
ASCII エンコーディングは、ASCII 文字セットをコンピュータ システムが格納できる数値に変換するエンコーディング ルールです。文字を表すには 7 ビット (ビット) を使用し、合計 128 文字になりますが、7 ビットのコード化文字セットは 128 文字しかサポートできません。より一般的なヨーロッパ文字を表すために、ASCII が拡張され、ASCII 拡張文字セットが使用します。 8 ビット ( ビット ) は文字を表し、合計 256 文字です。

4.3.1.3.3 GBXXXX 文字セットとエンコーディング

GB2312 標準には合計 6763 の中国語文字が含まれており、GB2312 ではすべての文字に 2 バイト表現が使用されます。
GBK には合計 21886 の漢字とグラフィック シンボルがあり、GBK はすべての文字に 2 バイト表現を使用します。
GB18030 には合計 70,244 の漢字が含まれており、GB18030 コードは 124 バイトの可変長コードです。ASCII エンコーディングと互換性のある 1 バイトです。
注: GBK は GB2312 と互換性があり、GB18030 は GBK と互換性があります。

4.3.1.3.4 Unicode 文字セットとエンコーディング

Unicodeとは、国際機関が策定した、世界中のあらゆる文字や記号に対応できる文字コード体系で、世界中のあらゆる文字に対応する数字を記録しています。
Unicode は単なる文字セットであり、エンコーディング方式ではありません。2 つのタイプがあり、1 つは UCS-2 文字セットで、2 バイトを使用して文字を表し、合計 65535 文字を表すことができます。もう 1 つは UCS-4 文字セットで、文字を表すために 4 バイトを使用し、合計で約 43 億文字を表すことができます。各コード ポイントは、エンコードせずに直接表示できる文字を表すことができます。

4.3.1.3.5 UTF-8 エンコーディング

UTF-8 は現在、インターネット上で最も広く使用されている Unicode エンコーディング方式であり、その最大の特徴は可変長です。文字を表すのに 1 ~ 4 バイトを使用でき、文字に応じて長さを変更できます。
UTF-8 は Unicode をバイト単位でエンコードします。UTF-8 の特徴は、異なる範囲の文字に対して異なる長さのエンコードを使用することです。0x00 ~ 0x7F の文字の場合、UTF-8 エンコーディングは ASCII エンコーディングとまったく同じです。
N バイト (N > 1) で表す必要がある文字の場合、最初のバイトの最初の N ビットはすべて 1 に設定され、N + 1 ビットは 0 に設定され、最初のバイトの残りの N - 1 バイトは両方のビットが 10 に設定され、残りのビットは文字の Unicode コード ポイントで埋められます。

4.3.1.3.6 ANSIエンコーディング

ANSI エンコーディングは、ローカル システムのデフォルトのエンコーディングです。中国では、ANSI エンコーディングのデフォルトは GBK です。

4.3.1.4 Python でのエンコードとデコード

Python3 文字列の内部表現は Unicode エンコーディングであるため、エンコーディング変換を行う場合、通常、Unicode を中間エンコーディングとして使用する必要があります。つまり、最初に他のエンコードされた文字列を Unicode にデコード (デコード) し、次に Unicode からエンコード (エンコード) します。別のエンコーディングに。
encode の機能は、ユニコード エンコーディングを str.encode(gbk) などの他のエンコードされた文字列に変換することです。これは、ユニコードでエンコードされた文字列 str を gbk エンコーディングに変換することを意味します。

string = '离离原上草,一岁一枯荣'.encode('gbk')
print(type(string))
print(string)

<クラス「バイト」>
b'\xc0\xeb\xc0\xeb\xd4\xad\xc9\xcf\xb2\xdd\xa3\xac\xd2\xbb\xcb\xea\xd2\xbb\xbf\xdd\xc8 \xd9'

エンコーディングは>>> print(chardet.detect(string))chardet.detectで検出できます

{'encoding': 'GB2312', '信頼度': 0.7407407407407407, 'language': '中国語'}

decode の機能は、他のエンコードされた文字列を str.decode(gbk) などの Unicode エンコーディングに変換することです。これは、gbk でエンコードされた文字列 str を Unicode エンコーディングに変換することを意味します。

string = '离离原上草,一岁一枯荣'.encode('gbk')
print(string)
print(string.decode('gbk'))

元の b'\xc0\xeb\xc0\xeb\xd4\xad\xc9\xcf\xb2\xdd\xa3\xac\xd2\xbb\xcb\xea\xd2\xbb\xbf\xdd\xc8\xd9
'芝生の上で、1歳と1匹が乾いた

概要: 他のエンコーディングを UTF-8 に変換する場合は、最初にそれを Unicode にデコードしてから、Unicode を変換媒体として使用する UTF-8 に再エンコードする必要があります。例: s='Chinese' utf8 ファイルの場合、文字列は utf8 でエンコードされ、gb2312 ファイルの場合、エンコードは gb2312 になります。この場合、エンコード変換を行うには、decode メソッドを使用して unicode エンコードに変換してから、encode メソッドを使用して別のエンコードに変換する必要があります。
通常、特定のエンコード方法が指定されていない場合、コード ファイルはシステムの既定のエンコードを使用して作成されます。

PS: 理解と記憶の便宜上、エンコードは大まかに暗号化、デコードは復号化と理解できます。暗号化(暗号化)前は理解できる平文ですが、暗号化(暗号化)後は理解不能な暗号文(バイト型)となります。対応するデコード (復号化) メソッドを介してのみ、正しく復号化できます。

4.3.2 文字列の作成

4.3.2.1 文字列識別子による作成

Python では、単一引用符 ('') または二重引用符 ("") を使用して文字列を表すことができ、複数行の文字列は三重引用符 ''' または """ を使用して表すことができます。

'hello,world'
"祝你好运~"
"""
多行内容:
离离原上草,一岁一枯荣。
野火烧不尽,春风吹又生。
远芳侵古道,晴翠接荒城。
又送王孙去,萋萋满别情。
"""

注:
1. Python では、単一の文字はなく、文字列のみです。1 文字も文字列です。
2. Python の単一引用符と二重引用符は、単独で使用する場合はまったく同じです。

4.3.2.2 文字列の連結と繰り返し

可迭代对象を参照序列的拼接和重复

4.3.2.3 文字エスケープ

定義する必要がある文字列に引用符がある場合、直接定義するとエラーが報告されます:
>>> string = 'Let's go'

トレースバック (最後の最後の呼び出し):
ファイル「C:\Program Files\Python3102\lib\code.py」、63 行目、実行
ソース コード = self.compile(source, filename, symbol)
ファイル「C:\Program Files\」 Python3102\lib\codeop.py」、185 行目、呼び出し
でreturn _maybe_compile(self.compiler, source, filename, symbol)
ファイル「C:\Program Files\Python3102\lib\codeop.py」、102 行目、_maybe_compile で
raise err1
ファイル「C:\Program Files\Python3102\lib\codeop.py」、91 行目、_maybe_compile
コード 1 = コンパイラ (ソース + 「\n」、ファイル名、シンボル)
ファイル「C:\Program Files\Python3102\lib\ codeop.py」、150 行目、呼び出し
中 codeob = compile(source, filename, symbol, self.flags, True)
File 「」、1 行目
string = 'Let's go'
^
SyntaxError: 終了していない文字列リテラル (1 行目で検出)

これは、文字列を定義する場合、引用符をペアでペアにする必要があり、上記の文字列にはペアにすることができない単一引用符が 3 つあるためです。この時点で、文字列を定義するために二重引用符を使用できます:
>>> string = "Let's go"
文字列を定義するときは、一重引用符と二重引用符の両方を使用できます。文字列内の一重引用符についても同様です。
通常、二重引用符を使用して文字列を定義する場合、文字列の内容自体に二重引用符を含めることはできません。また、単一引用符を使用して文字列を定義する場合、文字列の内容自体に単一引用符を含めることはできません。
ただし、定義する必要がある文字列コンテンツに一重引用符と二重引用符の両方がある場合はどうなるでしょうか。この状況に対処するには 2 つの方法があります
。 1. 定義には三重引用符を使用します。三重の一重引用符または二重引用符は問題ありませ
ん 2. 文字エスケープを使用します

4.3.2.3.2 文字エスケープ

文字エスケープとは、特定の記号を使用して特定の文字をエスケープし、この文字が他の意味を表すことができるようにすることです。Python\のペア記号でエスケープします。一般的なエスケープ文字は次のとおりです。

エスケープ文字 説明 表示効果
\ バックスラッシュ記号 \
' アポストロフィ '
" 二重引用符 "
\b バックスペース
\n 改行
\t タブ

上記の例は、エスケープが使用されている場合、「Let's go」と表現できます。一重引用符で囲まれたコンテンツには一重引用符が含まれていますが。\ただし、文字列内の単一引用符はエスケープされるため、エラーは報告されません。

4.3.2.4 文字列プレフィックス

Python3 では、文字列は str と bytes の 2 種類しかありません。プレフィックスを文字列の前に追加して、さまざまな効果を生み出すことができます. より一般的に使用されるプレフィックスは: r, u, b.
r: 後続の文字列の内容がエスケープされずにそのままである
ことを示します u: 後続の文字列が Unicode であり、Python3 ではデフォルトですべての文字列がこのタイプであることを示します。
b: 次の文字列がバイト型であることを示します.
Windows システムの絶対パスには\記号が含まれます. Python で Windows システムのパスを表現したい場合, パス内の文字が異なるため、エラーが報告されることがよくあります.\また、以下の文字はエスケープするためのエスケープ文字として使用されます.日常の使用には非常に不便です. この時点でr接頭辞を使用できます:
>>> print('C:\new\name') # ここ\nでは期待どおりではない改行を表します

C:\新
あめ

>>> print(r'C:\new\name') # 文字列の内容をそのまま表示

C:\some\name

このように、上記の文字列の文字\nは改行文字として表示されません。代わりに、そのままにしておきます。

4.3.3 文字列アクセス

4.3.3.1 文字列インデックス

可迭代对象を参照序列的索引

4.3.3.2 文字列のスライス

可迭代对象を参照序列的切片

4.3.3.3 文字列のトラバース

可迭代对象を参照可迭代对象的遍历

4.3.3.4 メンバーシップチェック

可迭代对象を参照成员资格检查

4.3.4 文字列の修飾

Python 文字列は変更できず、ハッシュ可能です。したがって、文字列のインデックス位置に値を代入するとエラーが報告されます:
>>> string = 'Python'
>>> string[0] = 'J'

トレースバック (最後の最後の呼び出し):
ファイル「C:\Program Files\Python3102\lib\code.py」、90 行目、runco​​de
exec(code, self.locals)
ファイル「」、1 行目、
TypeError: 'str ' オブジェクトは項目の割り当てをサポートしていません

別の文字列を生成するには、新しい文字列を作成します:
>>> string = 'Python'
>>> 'J' + string[1:]
>>> string[:2] + 'py'

「Jython」
「Pypy」

4.3.5 文字列の削除

文字列はハッシュ可能であるため、文字列内の要素 (文字) を削除する方法はありません。要素 (文字) の 1 つを削除するには、新しい文字列を作成する必要があります。
>>> 文字列 = 'Python'
>>> str2 = 文字列[:2] + 文字列[3:]
>>> str2

「ピホン」

4.3.6 文字列のフォーマット

文字列の出力形式に要件がある場合は、文字列の形式を使用する必要があります。たとえば、グループでテキスト メッセージを送信する場合、名前は毎回異なりますが、内容は同じです. このとき、文字列の書式設定が必要です.

こんにちはxx!これは山東小紅華グループです...

4.3.6.1%フォーマット

Python は、%プレースホルダーを使用して文字列をフォーマットできます。例:
>>> 'Hello, %s' % 'world'
>>> 'Hi, %s, you are %d years old.' % ('Yagami', 16)

「こんにちは、世界」
「こんにちは、八神、あなたは 16 歳です。」

stars = ("黎明", "华仔", "郭富城", "张学友")
print("四大天王:%s, %s, %s, %s" % stars)

四天王:レオン・ライ、アンディ・ラウ、アーロン・クォック、ジャッキー・チャン

文字列の内側には、文字列で%s置き換えることを%d意味し、整数で置き換えることを意味します. いくつかの%?プレースホルダーがあり、その後にいくつかの変数または値が続き、順序は対応している必要があります. が 1 つしかない場合は%?、変数の後ろのかっこを省略できます。
%格式化中常见的占位符:

プレースホルダ コンテンツを置き換える
%d 整数
%f 浮動小数点数
%s ストリング
%バツ 16 進整数

その中でも、整数と浮動小数点数の書式設定では、0 を補うかどうか、および整数と小数の桁数を指定することもできます。

print('%9d-%09d' % (3, 1))
print('%.6f' % 3.1415926)
      3-000000001

3.141593

何を使用すればよいかわからない場合、%s は常に機能し、任意のデータ型を文字列に変換します:
>>> 'Age: %s.Gender: %s' % (25, True)

「年齢:25歳。性別:本当」

カスタムフォーマットについては、後のカスタムフォーマットの章で詳しく紹介します。>>> '成長率: %d %%' % 7
使用%转义百分号

「成長率: 7 %」

4.3.6.2 形式

format は、Python 2.6 以降の文字列をフォーマットするための新しい関数です。文字列内のプレースホルダー {0}、{1} を、順番に渡された
パラメーターに置き換えます...文字列内のコンテンツ。>>> "{} {}".format("hello", "world") # デフォルトの順序に従って、指定された場所を設定しないでください>>> "{1} {0} {1}".format( "hello", "world") # 指定した場所を設定
指定位置

「ハローワールド」
「ワールドハローワールド」

设置参数
>>> "サイト名: {name}, アドレス: {url}".format(name="本", url="www.ben.com")

「サイト名: ベン、アドレス: www.ben.com」

通过字典设置参数
>>> site = {"name": "this", "url": "www.ben.com"}
>>> "site name: {name}, address {url}".format(**site)

「サイト名: ベン、アドレス: www.ben.com」

通过列表索引设置参数
>>> my_list = ['本', 'www.ben.com']
>>> "サイト名: {0[0]}, アドレス {0[1]}".format(my_list) # "0" は必要

「サイト名: ベン、アドレス: www.ben.com」

使用{}转义大括号
>>> "{} は { {10}} に対応".format("ben")

ベンに対応する位置は{10}です

値を変換する型、より正確には、値をどの型として扱うかを指定することもできます。たとえば、整数を指定しても小数として扱うことができます。これを行うには、フォーマット仕様 (つまり、コロンの後に) で文字 f (固定小数点数の場合) を使用します。
>>> "π は {:.2f}".format(3.1415926)

「πは3.14」

カスタムフォーマットについては、後のカスタムフォーマットの章で詳しく紹介します。

4.3.6.1 fストリング

f-string, フォーマット済み文字列リテラルとも呼ばれます. Python3.6 で導入された新しい文字列フォーマット方法です. この方法は PEP 498 – Literal String Interpolation から派生しています. 文字列操作はより簡単です. 形式では、f-string は f または F 修飾子 (f'xxx' または F'xxx') で始まる文字列であり、置換されるフィールドは中括弧 {} でマークされます; f-string は本質的に文字列ではありません。ですが、実行時に評価される式です。
機能的には、f-string は従来の %-formatting ステートメントや str.format() 関数に劣るものではありません.同時に、そのパフォーマンスは両方よりも優れており、より簡潔で明確に使用できます.したがって、 Python3.6 以降のバージョンでは、文字列の書式設定を行う f-string を使用することをお勧めします。f-string は中括弧 {} を使用して置換するフィールドを示し、置換内容を直接入力します: >>> name = 'Eric' >>> f'Hello, my name is {name}'
简单使用


「こんにちは、私の名前はエリックです」

>>> number = 7
>>> f'私のラッキー ナンバーは {number}' です

「私のラッキーナンバーは7」

>>> 価格 = 19.99
>>> f'この本の価格は {価格}'

「この本の価格は 19.99 です」

表达式求值与函数调用
f-string の中括弧 {} は、式または呼び出し関数で埋めることができ、Python は結果を計算し、返された文字列にそれらを埋めます。

>>> f'合計 {24 * 8 + 4}'

「総数196」

>>> f'複素数 {(2 + 2j) /(2 - 3j)}'

「複素数(-0.15384615384615388+0.7692307692307692j)」

>>> name = 'ERIC'
>>> f'私の名前は {name.lower()} です'

「私の名前はエリックです」

>>> import math
>>> f'The answer is {math.log(math.pi)}'

「答えは 1.1447298858494002 です」

引号、大括号与反斜杠
f-string 中括弧で使用される引用符は、中括弧の外側の引用符区切り文字と競合することはできず、状況に応じて ' と " を柔軟に切り替えることができます。

>>> f'私は {“Eric”}' です

「私はエリックです」

>>> f'私は {'Eric'}' です

File "<stdin>", line 1
  f'I am {'Eric'}'
              ^

SyntaxError: 無効な構文

' と " だけでは不十分な場合は、''' と """ も使用できます。
中括弧の外側の引用符も \ でエスケープできますが、中括弧の内側ではエスケープできません。

>>> f'''彼は{“私はエリックです”}'''と言うでしょう

「彼は私がエリックだと言うだろう」

>>> f'''彼は{“私はエリックです”}'''と言うでしょう

File "<stdin>", line 1

SyntaxError: f-string 式の部分にバックスラッシュを含めることはできません

中かっこを f 文字列中かっこの外側に表示する必要がある場合は、2 つの連続した中かっこ { { と }}を入力する必要があります。
>>> f'5 {“{stars}”}'
>>> f'{ {5} } {"星"}'

'5 {星}'
'{5} 星'

前述のように、\ エスケープは f-string 中括弧では使用できません. 実際、それだけでなく、\ は f-string 中括弧ではまったく使用できません。\ が本当に必要な場合は、\ を含むコンテンツを最初に変数で表し、次に変数名を f-string 中かっこで埋める必要があります。

4.3.6.2 カスタム形式

上記の 3 つの文字列の書式設定方法を学習することで、文字列の書式設定に使用されるカスタム書式を大まかに理解できます。
文字列を書式設定するこれら 3 つの方法はすべてカスタム書式を使用でき、方法は似ています。以下は、フォーマットをカスタマイズする方法の詳細な紹介です。
主に含まれるもの: 配置、幅、符号、ゼロ パディング、精度、ベースなど。

4.3.6.2.1 アラインメントの依存関係

< 左揃え (文字列のデフォルトの配置)、&次を使用してフォーマット-

右揃え (値の既定の配置)、 ^ 中央揃え&を使用して書式設定され、 および+
に適用可能f-stringformat

var1 = 'python'
var2 = -3.1415
print(f'|{
      
      var1:>10}|')
print('|{:^10}|'.format(var2))
print('|%+10s|' % var1)
print('|%-10s|' % var2)

| | パイソン|
| | -3.1415 |
| | パイソン|
|-3.1415 |

4.3.6.2.2 桁署名依存形式記述子
  •   负数前加负号(-),正数前加正号(+)
    
  •   负数前加负号(-),正数前不加任何符号(默认)
    

負の数の前にマイナス記号 (-) を追加し、正の数の前にスペースを追加します

注: 数値型のみに適用されます。

var1 = 3.14
var2 = -4.13
print(f'|{
      
      var1:+}|')
print('|{:-}|'.format(var2))
print('|{: }|'.format(var1))
print('|%+s|' % var1)

|+3.14|
|-4.13|
| 3.14|
|3.14|

4.3.6.2.3 幅と精度に依存するフォーマット記述子

width Integer width は幅を指定します
0width Integer width は幅を指定し、先頭の 0 は上位ビットを指定し、幅を 0 で埋め
ます

注:
1. 0width は複素数型および非数値型には使用できず、width.precision は整数型には使用できません。
2. Width.precision は、異なる形式の浮動小数点数と複素数に使用される場合、異なる意味を持ちます: f、F、e、E、および % に使用される場合、精度は小数点以下の桁数を指定します; g に使用される場合および G、精度 有効桁数 (小数点の前の桁数 + 小数点の後の桁数) を指定します。
3. width.precision は、浮動小数点数と複素数以外の文字列にも使用できます. このとき、精度は文字列の最初の精度文字のみを使用することを意味します.

var1 = 3.1415
print(f'|{
      
      var1:8}|')
print('|{:8.3}|'.format(var1))
print('|{:.4}|'.format(var1))
print('|%10.5s|' % var1)

| 3.1415|
| 3.14|
|3.142|
| 3.141|

4.3.6.2.4 桁区切り関連のフォーマット記述子

, 千単位の区切り文字として , を
使用 _千単位の区切り文字として _ を使用
注:
1. , またはが指定されていない場合、f-string は、デフォルト設定である千単位の区切り文字を使用しません。
2. 浮動小数点数、複素数、および 10 進整数にのみ適用可能: 浮動小数点数および複素数の場合、 は小数点の前の桁のみを区切ります。
3.
浮動小数点数、複素数、および 2 進数、8 進数、10 進数、および 16 進数の整数に適用可能: 浮動小数点数および複素数の場合、_ は小数点の前の桁のみを区切ります; 2 進数、8 進数、および 16 進数の整数の場合は、下位から固定 上位ビットには 4 ビットごとに _ が挿入されます (10 進整数の場合は 3 ビットごとに _ が挿入されます)。

var1 = 31415
print(f'|{
      
      var1:_}|')
print('|{:,}|'.format(var1))
print('|%,s|' % var1)  # 不适用

|31_415|
|31,415|
トレースバック (最新の呼び出しが最後):
ファイル「E:\studypy\tmp.py」、4 行目、
print('|% s|' % var1) 内
ValueError: サポートされていない書式文字 '
' (0x5f) がインデックス 2 にある

4.3.6.2.5 フォーマットタイプ依存のフォーマット記述子

フォーマット記述子の意味と機能 適用可能な変数の型
s 通常の文字列フォーマット文字列
b 2 進整数フォーマット整数
c 文字フォーマット、整数を Unicode エンコーディングに従って対応する文字整数に変換
d 10 進整数フォーマット整数
o 8 進整数フォーマット整数
x 16 進整数フォーマット(小文字) 整数
X 16 進整数形式 (大文字) 整数
e e × 10^ で表される科学表記形式 浮動小数点数、複素数、整数 (自動的に浮動小数点数に変換されます)
E は e と同等ですが、E を使用します×10^ 浮動小数点数、複素数、整数 (浮動小数点数に自動変換)
f 固定小数点数形式、デフォルトの精度 (精度) は 6 浮動小数点数、複素数、整数 (自動変換)
F は f と同等ですが、nan と inf を NAN と INF に置き換えます
。浮動小数点数、複素数、整数 (自動的に浮動小数点数に変換されます)
G と G は同等ですが、F は 10 進数に使用され、E は大きな数に使用されます。浮動小数点数、複素数、および整数 (自動的に浮動小数点数に変換されます)
% パーセンテージ形式、数値は自動的に 100 で乗算され、f 形式でフォーマットされ、% サフィックス付き浮動小数点数、整数 (自動的に浮動小数点数に変換されます)

4.3.7 文字列メソッド

4.3.7.1 コーデック クラス

4.3.7.1.1 エンコード (encoding='UTF-8',errors='strict')

描述
指定された文字列をエンコードします。エンコードされた戻り結果はバイト型です。
エラー パラメータは、さまざまなエラー処理スキームを設定するために使用されます。デフォルトは「strict」で、エンコーディング エラーが発生すると UnicodeError が発生することを意味します。他の可能な値は、「ignore」、「replace」、「xmlcharrefreplace」、「backslashreplace」です。
示例

s1 = 'ab甲乙'
s2 = s1.encode(encoding='utf-8')
print(s2)

b'ab\xe7\x94\xb2\xe4\xb9\x99'

4.3.7.1.2 デコード (encoding="utf-8", errors="strict")

描述
バイト オブジェクトをデコードします。デコード後に返される結果は str 型です。
エラー パラメータは、さまざまなエラー処理スキームを設定するために使用されます。デフォルトは「strict」で、エンコーディング エラーが発生すると UnicodeError が発生することを意味します。他の可能な値は、「ignore」、「replace」、「xmlcharrefreplace」、「backslashreplace」です。
示例

s1 = 'ab甲乙'
s2 = s1.encode(encoding='utf-8')
print(s2)
s3 = s2.decode(encoding='utf-8')
print(s3)

b'ab\xe7\x94\xb2\xe4\xb9\x99'
ab A B

4.3.7.2 検索統計クラス

4.3.7.2.1 カウント

可迭代对象章のサブセクションの序列シーケンスcountメソッドを参照してください。

4.3.7.2.2 find(str, beg=0, end=len(文字列))、rfind

描述
string 内で str が現れるインデックスを返します。見つからない場合は -1 を返します。rfind は、右から検索することを意味します。
beg パラメータと end パラメータは検索範囲を表し、デフォルトでは str 全体が検索されます。
示例

s = ' Python tian \t mao \n taobao '
print(s.find('o'))
print(s.find('ao'))
print(s.find('io'))

5
16
-1

4.3.7.2.3 インデックス、rindex

可迭代对象章のサブセクションの序列シーケンスindexメソッドを参照してください。

4.3.7.3 書式設定クラス

4.3.7.3.1 center(幅, fillchar)

描述
指定された幅の幅を中央に揃えた文字列を返します。fillchar は塗りつぶされた文字で、デフォルトはスペースです。
示例

s = ' Python tian \t mao taobao '
print(f"|{
      
      s.center(30)}|")
print(f"|{
      
      s.center(30, '*')}|") 

| Python 天毛淘宝網 |
|** Python 天毛淘宝網 **|

4.3.7.3.2 bright(width[, fillchar])、rjust

描述
元の文字列に対して左 (右) に揃えられ、幅の長さまで fillchar で埋められた新しい文字列を返します。fillchar の既定値はスペースです。
示例

s = ' Python tian \t mao taobao '
print(f"|{
      
      s.ljust(30)}|")
print(f"|{
      
      s.ljust(30, '*')}|") 

| Python 天毛淘宝網 |
| Python 天毛淘宝網 ****|

4.3.7.3.3 zfill(幅)

描述
長さ width の文字列を返します。元の文字列は右揃えで、先頭は 0 で埋められます。
示例

s = ' Python tian \t mao taobao '
print(f"|{
      
      s.zfill(30)}|")

|0000 パイソン天毛淘宝網 |

4.3.7.4 コンバイン傍受クラス

4.3.7.4.1 結合(シーケンス)

描述
指定された文字列を区切り文字として使用して、seq 内のすべての要素 (文字列表現) を新しい文字列にマージします。
示例

seq = ['a', 'b', 'c']
s = '*'.join(seq)
print(s)

a b c

4.3.7.4.2 lstrip()、rstrip()

描述
文字列の左側 (右側) にあるスペースまたは指定された文字を切り取ります。
示例

s = ' Python tian \t mao taobao '
print(f"|{
      
      s.lstrip()}|")
print(f"|{
      
      s.rstrip()}|")
print(f"|{
      
      s.rstrip('ao ')}|")

|ニシキヘビ天毛淘宝網 |
| | ニシキヘビ天毛淘宝網|
| | Python tian so taob|

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

描述
文字列をインターセプトする区切り文字として str を使用します。デフォルトはスペース、改行、タブなどです。num に指定された値がある場合、num+1 個の部分文字列のみがインターセプトされます
示例

s = ' Python tian \t mao \n taobao '
print(f"|{
      
      s.split()}|")
print(f"|{
      
      s.split('o')}|")

|['Pyth', 'tian', 'mao', 'taobao']|
|['Pyth', 'n tian \t ma', ' \n ta', 'ba', ' ']|

4.3.7.4.4 分割行([keepends])

描述
行 ('\r'、'\r\n'、\n') で区切り、各行を要素として含むリストを返します。パラメータ keepends が False の場合、改行文字を含めません。True の場合、改行文字を保持します。 .
示例

s = ' Python tian \t mao \n taobao '
print(f"|{
      
      s.splitlines()}|")
print(f"|{
      
      s.splitlines(True)}|")

|[' Python tian \t mao ', ' taobao ']|
|[' Python tian \t mao \n', ' taobao ']|

4.3.7.4.5 ストリップ([文字])

描述
文字列に対する lstrip() と rstrip() の同時実行
示例

s = ' Python tian \t mao taobao '
print(f"|{
      
      s.strip()}|")
print(f"|{
      
      s.strip('ao ')}|")

|ニシキヘビ天毛淘宝網|
|パイソン ティアン マオ タオブ|

4.3.7.5 判定クラス

4.3.7.5.1 startswith(substr, beg=0,end=len(string))、endswith

描述
文字列が指定された部分文字列 substr で始まるかどうかをチェックし、そうであれば True を返し、そうでなければ False を返します。beg と end に値を指定する場合は、指定された範囲内でチェックしてください。
示例

s = ' Python tian \t mao taobao '
print(f"|{
      
      s.startswith(' ')}|")
print(f"|{
      
      s.endswith('a')}|")

|真|
|偽|

4.3.7.5.2 islower()、isupper()

描述
文字列に大文字と小文字が区別される文字があり、それらがすべて小文字 (大文字) の場合は True を返し、それ以外の場合は False を返します。
示例

s = ' python tian \t mao 赛车12 '
print(f"|{
      
      s.islower()}|")
print(f"|{
      
      s.isupper()}|")

|真|
|偽|

4.3.7.5.3 isalnum()

描述
文字列に文字と数字のみが含まれる場合は True を返し、それ以外の場合は False を返します。
示例

s1 = 'python 赛车12'
print(f"|{
      
      s1.isalnum()}|")
s2 = 'python 12'
print(f"|{
      
      s2.isalnum()}|")
s3 = 'python12'
print(f"|{
      
      s3.isalnum()}|")

|偽|
|偽|
|真|

4.3.7.5.4 isalpha()

描述
文字列に文字と単語 (中国語、日本語など) のみが含まれる場合は True を返し、それ以外の場合は False を返します。
示例

s1 = 'python 赛车12'
print(f"|{
      
      s1.isalpha()}|")
s2 = 'python 12'
print(f"|{
      
      s2.isalpha()}|")
s3 = 'python12'
print(f"|{
      
      s3.isalpha()}|")
s4 = 'python赛车'
print(f"|{
      
      s4.isalpha()}|")
s5 = 'こんにちは'
print(f"|{
      
      s5.isalpha()}|")

|偽|
|偽|
|偽|
|真|
|偽|

4.3.7.5.5 isdecimal()

描述
文字列に 10 進文字のみが含まれているかどうかを確認し、含まれている場合は true、そうでない場合は false を返します。
示例

s = 'python 赛车12'
print(f"|{
      
      s.isdecimal()}|")
s = 'p12'
print(f"|{
      
      s.isdecimal()}|")
s = '12'
print(f"|{
      
      s.isdecimal()}|")
s = '0x12'
print(f"|{
      
      s.isdecimal()}|")

|偽|
|偽|
|真|
|偽|

4.3.7.5.6 isdigit()、isnumeric()

描述
文字列に数字のみが含まれる場合は True を返し、それ以外の場合は False を返します。

4.3.7.5.7 isspace()

描述
文字列にスペースのみが含まれる場合は True を返し、それ以外の場合は False を返します。

4.3.7.5.8 istitle()

描述
文字列内のすべての単語がタイトル形式 (最初の文字が大文字) である場合は True を返し、それ以外の場合は False を返します。

4.3.7.6 変換クラス

4.3.7.6.1 大文字にする()

描述
文字列の最初の文字のみを大文字に変換します。最初が文字でない場合は、何もしません。
示例

s = ' python Tian 赛车12 '
print(f"|{
      
      s.capitalize()}|")
s = 'python Tian 赛车12 '
print(f"|{
      
      s.capitalize()}|")

| | パイソン ティアン レーシング 12 |
| パイソン ティアン レーシング 12 |

4.3.7.6.2 ローワー()、アッパー()

描述
文字列内のすべての小文字 (大文字) を大文字 (小文字) 文字に変換します
示例

s = ' pyTHon Tian 赛车12 '
print(f"|{
      
      s.lower()}|")
s = 'python Tian 赛车12 '
print(f"|{
      
      s.upper()}|")

| パイソン ティアン レーシング 12 | | パイソン ティアン レーシング
12 |

4.3.7.6.3 replace(古い, 新しい [, 最大])

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

s = ' pyTHon Tian 赛车12 '
print(f"|{
      
      s.replace('T','*')}|")
print(f"|{
      
      s.replace('T','*', 1)}|")
print(f"|{
      
      s.replace('Ti','/', 1)}|")

| py*Hon ian レーシング 12 |
| py
Hon Tian レーシング 12 |
| pyTHon /an レーシング 12 |

4.3.7.6.4 タイトル()

描述
返された标题化文字列は、すべての単語が大文字で始まり、残りの文字が小文字であることを意味します。

4.3.7.6.5 expandtabs(タブサイズ)

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

s = '\tTian 赛车12 '
print(f"|{
      
      s}|")
print(f"|{
      
      s.expandtabs()}|")
print(f"|{
      
      s.expandtabs(2)}|")

| 天レーシング 12 |
| 天レーシング 12 |
| 天レーシング 12 |

4.3.7.6.6 スワップケース()

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

4.3.7.6.7 maketrans()、translate(テーブル、deletechars="")

描述
maketrans は、文字マッピング用の変換テーブルを作成するために使用されます.2 つのパラメーターを受け取る最も単純な呼び出しメソッドの場合、最初のパラメーターは変換する文字を示す文字列であり、2 番目のパラメーターも変換対象を示す文字列です。 .
translate は、table で指定された表に従って string の文字を変換します (256 文字を含む)。
これら 2 つの方法を組み合わせると、文字列内の複数の文字を簡単かつ迅速に置き換えることができます。
示例

s = ' python Tian 赛车12 '
x = "yo"
y = "ab"
z = "车"   # 设置删除的字符
mytable = s.maketrans(x, y, z)
print(mytable)
print(s.translate(mytable))

{121: 97, 111: 98, 36710: なし}
pathbn Tian Sai 12

おすすめ

転載: blog.csdn.net/crleep/article/details/125758769