【完全版】Pythonのstr(文字列)操作|コード付きで徹底解説

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2023年6月)

✔この記事は、以下のような疑問を持っている方々に向けて書かれています

「Pythonのstrってどんな機能があるの?」

「strを使ったPythonのコードを書きたい!」

「Pythonのstrを使った具体的な例を見て理解したい」

✔この記事で皆さんに伝えたい内容は

  • Pythonのstrの基本概念
  • strを使用したPythonのコードの書き方と応用
  • strを活用したPythonの実例

当記事では、Pythonのstrの基本概念から始め、その応用法、そしてstrを使った具体的なコード例まで、分かりやすく解説しています。

ぜひ最後までご覧ください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロマネ/システムプランニング(元外資系金融機関営業)

【副業】ブログ(月間12万PV)/YouTube/Web・アプリ制作

コミュニケーション × ビジネススキル × 文章力 × プログラミングスキルを活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

【名著】リーダブルコード
  1. Pythonのstr(文字列型)を理解するための前提知識
    1. Pythonの紹介
    2. 文字列とは
  2. 文字列の作成と基本操作
    1. 文字列の定義
      1. シングルクォートとダブルクォート
      2. 文字列を変数に保存
    2. 文字列の結合
      1. プラス記号を使った結合
      2. フォーマットを用いた結合
    3. str関数の活用
      1. str関数の書式と基本的な使い方
    4. サンプルコード
      1. 数値型から文字列型への変換
      2. リスト型から文字列型への変換
      3. タプル型から文字列型への変換
      4. 辞書型から文字列型への変換
      5. 真偽値型から文字列型への変換
      6. None型から文字列型への変換
  3. str型のメソッドとテクニック
    1. 文字数を調べる: len()関数
    2. 文字列内の検索: find(), index()
    3. 大文字・小文字変換: upper(), lower()
    4. 文字列の置換: replace()
    5. 文字列の分割: split()
    6. 文字列の整形: strip(), lstrip(), rstrip()
  4. 高度な文字列フォーマット
      1. printf形式の文字列書式化
    1. f-stringsを利用したフォーマット
    2. format()メソッドを利用したフォーマット
    3. 数値のフォーマット
  5. エスケープシーケンスと特殊文字
    1. 改行、タブ、引用符の表示
    2. バックスラッシュの利用
  6. Pythonのデータ型とstr型の関連
    1. 真理値判定とブール演算
    2. 比較演算子
    3. 数値型とその操作
      1. 整数型のビット単位演算
      2. 整数型の追加メソッド
      3. 浮動小数点数の追加メソッド
      4. 数値型のハッシュ化
    4. イテレータ型とジェネレータ
    5. シーケンス型: list, tuple, range
      1. シーケンスの共通操作
      2. イミュータブルとミュータブルなシーケンス型
      3. リスト型(list)の使い方
      4. タプル型(tuple)の使い方
      5. range型の使い方
    6. バイナリシーケンス型: bytes, bytearray, memoryview
      1. バイトオブジェクトの操作
      2. bytearrayオブジェクトの操作
      3. bytesとbytearrayの共通操作
      4. printf形式でのbytesの書式化
  7. str型の注意点とトリビア
    1. 文字列は不変(immutable)
    2. Unicodeとエンコーディング
  8. 実践編:Pythonでの文字列操作の例
    1. 名前と挨拶を組み合わせて表示するプログラム
    2. CSVデータの簡単な処理
    3. ユーザー入力を受け取って処理するプログラム
  9. まとめ

Pythonのstr(文字列型)を理解するための前提知識

当記事では、Pythonとその文字列型(str型)について解説します。

  • Pythonの紹介
  • 文字列とは

Pythonの紹介

Pythonは、コードがシンプルで読みやすく、多くのプラットフォームで動作するプログラミング言語です。

初心者にとっては覚えやすく、かつプロフェッショナルにとっても強力なツールです。

PythonはWeb開発、データ解析、人工知能、自動化など、多岐にわたる分野で利用されています。

文字列とは

文字列は、文字の並びを表すデータ型です。

"Hello, World!"

これはは13文字からなる文字列です。

Pythonでは、シングルクォート(‘ ‘)またはダブルクォート(” “)で囲むことで文字列を作成します。

これは、人間とコンピュータがコミュニケーションするための重要な手段です。

文字列の作成と基本操作

こちらでは、文字列の作成方法と基本的な操作について学びます。

  • 文字列の定義
  • 文字列の結合
  • str関数の活用

文字列の定義

Pythonでは、文字列を定義するためにシングルクォート(‘ ‘)またはダブルクォート(” “)を使用します。

これにより、テキストデータをプログラム内で扱えるのです。

  • シングルクォートとダブルクォート
  • 文字列を変数に保存

シングルクォートとダブルクォート

Pythonでは、’hello’や”hello”のように、シングルクォートとダブルクォートのどちらを使用しても文字列として認識されます。

ただし、文字列内にクォート文字を含める場合は注意が必要です。

例えば、”I’m happy”のような文字列では、ダブルクォートを使用する必要があります。

また複数行の文字列は、シングル・ダブルクウォートを3つ重ねることで、認識可能です。

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

文字列を変数に保存

文字列を変数に保存することで、後から繰り返し使用・操作が可能です。

greeting = "Hello, World!"

変数greetingに「Hello, World!」とう文字列を代入されました。

文字列の結合

Pythonでは、簡単に文字列を結合できます。

これは、メッセージの作成や、テキストの処理に非常に便利です。

  • プラス記号を使った結合
  • フォーマットを用いた結合

プラス記号を使った結合

文字列同士は+演算子を用いて結合できます。

print("Hello" + " " + "World!")
"Hello World!"

フォーマットを用いた結合

Pythonでは、format()メソッドやf-stringを使用して、文字列内に変数の値を埋め込めます。

name = "Alice"

print("Hello, {}".format(name)) #Hello, Alice
print(f"Hello, {name}") #Hello, Alice

どちらも”Hello, Alice”という文字列になります。

str関数の活用

str関数は、非文字列のデータを文字列に変換します。

数値やオブジェクトを文字列として扱いたいときに便利です。

  • str関数の書式と基本的な使い方
  • サンプルコード

str関数の書式と基本的な使い方

str関数の基本的な使い方は、str(オブジェクト)です。

str(123)

数値123を”123″という文字列に変換します。

サンプルコード

以下に、strメソッドを使って他のデータ型を文字列に変換する例をいくつか示します。

  • 数値型から文字列型への変換
  • リスト型から文字列型への変換
  • タプル型から文字列型への変換
  • 辞書型から文字列型への変換
  • 真偽値型から文字列型への変換
  • None型から文字列型への変換

数値型から文字列型への変換

number = 10
number_str = str(number)
print(number_str)  # Output: "10"

リスト型から文字列型への変換

my_list = [1, 2, 3]
list_str = str(my_list)
print(list_str)  # Output: "[1, 2, 3]"

タプル型から文字列型への変換

my_tuple = (4, 5, 6)
tuple_str = str(my_tuple)
print(tuple_str)  # Output: "(4, 5, 6)"

辞書型から文字列型への変換

my_dict = {"name": "Alice", "age": 25}
dict_str = str(my_dict)
print(dict_str)  # Output: "{'name': 'Alice', 'age': 25}"

真偽値型から文字列型への変換

boolean = True
boolean_str = str(boolean)
print(boolean_str)  # Output: "True"

None型から文字列型への変換

none_value = None
none_str = str(none_value)
print(none_str)  # Output: "None"

str型のメソッドとテクニック

こちらでは、str型に組み込まれたメソッドと、文字列を扱う上でのテクニックについて学びます。

  • 文字数を調べる: len()関数
  • 文字列内の検索: find(), index()
  • 大文字・小文字変換: upper(), lower()
  • 文字列の置換: replace()
  • 文字列の分割: split()
  • 文字列の整形: strip(), lstrip(), rstrip()

文字数を調べる: len()関数

文字列の長さ、つまり文字数を調べるにはlen()関数を使用します。

len("Hello, World!")
#13

スペースと句読点を含む文字の数です。

文字列内の検索: find(), index()

文字列内で特定の文字列がどこに現れるかを調べるためにfind()index()メソッドを使用します。

find()は、見つからなかった場合に-1を返し、index()はエラーを引き起こします。

text = "Hello, World!"

# find()メソッドを使用して文字列の位置を調べる
position = text.find("World")
print(position)  # Output: 7

# index()メソッドを使用して文字列の位置を調べる
position = text.index("World")
print(position)  # Output: 7

大文字・小文字変換: upper(), lower()

upper()メソッドは文字列を大文字に、lower()メソッドは小文字に変換します。

文字列の比較や検索などで大文字小文字を無視する場合に便利です。

text = "Hello, World!"

# upper()メソッドを使用して文字列を大文字に変換する
upper_text = text.upper()
print(upper_text)  # Output: "HELLO, WORLD!"

# lower()メソッドを使用して文字列を小文字に変換する
lower_text = text.lower()
print(lower_text)  # Output: "hello, world!"

文字列の置換: replace()

replace()メソッドは、文字列内の一部を別の文字列に置き換えます。

テキストの修正やフォーマットの変更などに使えるものです。

text = "Hello, World!"

# replace()メソッドを使用して文字列内の一部を置き換える
new_text = text.replace("World", "Python")
print(new_text)  # Output: "Hello, Python!"

文字列の分割: split()

split()メソッドは、指定した区切り文字で文字列を分割し、リストとして返すもの。

CSVデータやログファイルの解析などによく使われます。

text = "apple,banana,cherry"

# split()メソッドを使用して文字列をカンマで分割する
fruits = text.split(",")
print(fruits)  # Output: ['apple', 'banana', 'cherry']

文字列の整形: strip(), lstrip(), rstrip()

strip関連のメソッドは以下の3つ。

  • strip()メソッド:文字列の両端から空白文字を取り除く
  • lstrip()メソッド:左端から空白文字を取り除く
  • rstrip():右端から空白文字を取り除く

これらのメソッドは、ユーザー入力の整形やテキストデータの前処理に役立ちます。

text = "   Hello, World!   "

# strip()メソッドを使用して両端の空白文字を取り除く
trimmed_text = text.strip()
print(trimmed_text)  # Output: "Hello, World!"

# lstrip()メソッドを使用して左端の空白文字を取り除く
left_trimmed_text = text.lstrip()
print(left_trimmed_text)  # Output: "Hello, World!   "

# rstrip()メソッドを使用して右端の空白文字を取り除く
right_trimmed_text = text.rstrip()
print(right_trimmed_text)  # Output: "   Hello, World!"

高度な文字列フォーマット

このセクションでは、f-stringsやformat()メソッドを使って、さらに高度な文字列フォーマットについて見ていきます。

  • printf形式の文字列書式化
  • f-stringsを利用したフォーマット
  • format()メソッドを利用したフォーマット
  • 数値のフォーマット

printf形式の文字列書式化

printfスタイルの書式指定を用いて、文字列を整形できます。

name = "Alice"
age = 25

formatted_string = "%s is %d years old" % (name, age)
print(formatted_string)  # Output: "Alice is 25 years old"

f-stringsを利用したフォーマット

Python 3.6以降、f-stringsを使用して文字列内に変数を埋め込めます。

name = "Alice"
age = 25

formatted_string = f"{name} is {age} years old"
print(formatted_string)  # Output: "Alice is 25 years old"

format()メソッドを利用したフォーマット

format()メソッドを使って、文字列内に変数や値を埋め込めます。

f-stringsと同じように使えますが、Pythonの古いバージョンでも対応できるのが特徴です。

name = "Alice"
age = 25

formatted_string = "{} is {} years old".format(name, age)
print(formatted_string)  # Output: "Alice is 25 years old"

数値のフォーマット

数値を文字列としてフォーマットする際、小数点以下の桁数を制御したり、カンマ区切りを使ったりが可能。

number = 12345.6789

formatted_decimal = "{:.2f}".format(number)
print(formatted_decimal)  # Output: "12345.68"

formatted_comma = "{:,.2f}".format(number)
print(formatted_comma)  # Output: "12,345.68"

エスケープシーケンスと特殊文字

こちらでは、改行やタブ、引用符などのエスケープシーケンスや特殊文字の表示方法について学びます。

  • 改行、タブ、引用符の表示
  • バックスラッシュの利用

改行、タブ、引用符の表示

文字列内で特殊なスペーシングや引用符を表示できるものがあります。

  • \n:改行
  • \t:タブ
  • \”と\’:それぞれダブルクォートとシングルクォートを表すエスケープシーケンス

サンプルコードを見てみましょう。

# 改行とタブを含む文字列
text1 = "Hello\nWorld!"
print(text1)
# Output:
# Hello
# World!

text2 = "Python\tProgramming"
print(text2)
# Output: Python    Programming

# 引用符を含む文字列
quote1 = "He said, \"Hello!\""
print(quote1)
# Output: He said, "Hello!"

quote2 = 'She said, \'Hi!\'.'
print(quote2)
# Output: She said, 'Hi!'.

エスケープシーケンスについてはこちらの記事もどうぞ。

バックスラッシュの利用

バックスラッシュ\\を使用して、文字列内でリテラルのバックスラッシュを表示できます。

ファイルパスを表す際などに役立つ方法です。

# ファイルパスを表す文字列
file_path = "C:\\path\\to\\file.txt"
print(file_path)
# Output: C:\path\to\file.txt

# バックスラッシュを含む文字列
text = "This is a backslash: \\"
print(text)
# Output: This is a backslash: \

# バックスラッシュを連続して表示する場合
text2 = "Double backslashes: \\\\"
print(text2)
# Output: Double backslashes: \\

Pythonのデータ型とstr型の関連

こちらでは、Pythonのデータ型とstr型の相互作用について学びます。

真理値判定、比較演算子、数値型、イテレータ型、シーケンス型、バイナリシーケンス型などが扱われます。

  • 真理値判定とブール演算
  • 比較演算子
  • 数値型とその操作
  • イテレータ型とジェネレータ
  • シーケンス型: list, tuple, range
  • バイナリシーケンス型: bytes, bytearray, memoryview

真理値判定とブール演算

Pythonの真理値判定では、空の文字列""Falseと評価されます。

空以外の文字列はすべてTrueです。

ブール演算子and, or, notを使用して複雑な真理値式の作成も可能です。

# 真理値判定の例
text1 = ""
text2 = "Hello"

if text1:
    print("text1 is True")
else:
    print("text1 is False")
# Output: text1 is False

if text2:
    print("text2 is True")
else:
    print("text2 is False")
# Output: text2 is True

# ブール演算子の例
x = 5
y = 10

result1 = (x > 0) and (y > 0)
print(result1)
# Output: True

result2 = (x > 0) or (y < 0)
print(result2)
# Output: True

result3 = not (x > 0)
print(result3)
# Output: False

比較演算子

文字列を比較する際、Pythonは文字列の各文字をUnicodeのコードポイントで比較します。

辞書式の順序で文字列を比較できるようになるのです。

str1 = "apple"
str2 = "banana"

result1 = str1 < str2
print(result1)
# Output: True

result2 = str1 > str2
print(result2)
# Output: False

result3 = str1 == str2
print(result3)
# Output: False

数値型とその操作

数値型とその操作方法をご覧いただきます。

  • 整数型のビット単位演算
  • 整数型の追加メソッド
  • 浮動小数点数の追加メソッド
  • 数値型のハッシュ化

整数型のビット単位演算

整数型にはビット単位の演算が提供されており、これによりビットパターンを操作できます。

num1 = 10  # 二進数表記: 1010
num2 = 6   # 二進数表記: 0110

# ビット単位の論理積(AND)演算
result1 = num1 & num2
print(result1)
# Output: 2 (二進数表記: 0010)

# ビット単位の論理和(OR)演算
result2 = num1 | num2
print(result2)
# Output: 14 (二進数表記: 1110)

# ビット単位の排他的論理和(XOR)演算
result3 = num1 ^ num2
print(result3)
# Output: 12 (二進数表記: 1100)

# ビット単位の否定(NOT)演算
result4 = ~num1
print(result4)
# Output: -11 (二進数表記: 11111111111111111111111111110101)

整数型の追加メソッド

整数型にはbit_length()などの便利なメソッドがあります。

num = 42

# ビット数を取得する
bit_count = num.bit_length()
print(bit_count)
# Output: 6

# 2進数の文字列を取得する
binary_str = bin(num)
print(binary_str)
# Output: '0b101010'

# 16進数の文字列を取得する
hex_str = hex(num)
print(hex_str)
# Output: '0x2a'

# 8進数の文字列を取得する
oct_str = oct(num)
print(oct_str)
# Output: '0o52'

浮動小数点数の追加メソッド

浮動小数点数には、as_integer_ratio()などのメソッドがあります。

num = 3.14159

# 分数表現の数値を取得する
fraction = num.as_integer_ratio()
print(fraction)
# Output: (3537118854371271, 1125899906842624)

# 数値の指数部と仮数部を取得する
exponent, mantissa = num.as_integer_ratio().as_integer_ratio()
print("Exponent:", exponent)
print("Mantissa:", mantissa)
# Output:
# Exponent: 3537118854371271
# Mantissa: 1125899906842624

# 数値を整数に変換する
integer_value = int(num)
print(integer_value)
# Output: 3

# 数値を指定した桁数に丸める
rounded_value = round(num, 2)
print(rounded_value)
# Output: 3.14

数値型のハッシュ化

数値型をハッシュ化することで、辞書のキーとして使用できます。

num1 = 42
num2 = 3.14
num3 = 10000000000000000000000000000000000000000000000000000000000000000

# 数値をキーとして持つ辞書を作成
data = {
    hash(num1): "Value 1",
    hash(num2): "Value 2",
    hash(num3): "Value 3"
}

# 辞書から値を取得
value1 = data[hash(num1)]
value2 = data[hash(num2)]
value3 = data[hash(num3)]

print(value1)
print(value2)
print(value3)

イテレータ型とジェネレータ

文字列はイテレータとして扱うことができ、forループで一文字ずつ処理が可能です。

ジェネレータを使って、大量のデータの効率的に処理をおこなう方法もあります。

text = "Hello, World!"

# 文字列をイテレータとして扱い、一文字ずつ処理する
for char in text:
    print(char)

# ジェネレータを使って大量のデータを効率的に処理する
def process_data(data):
    for item in data:
        # 何らかの処理
        yield processed_item

# 大量のデータを生成するジェネレータを作成
def generate_data():
    for i in range(1000000):
        yield i

# ジェネレータを使ってデータを効率的に処理する
data_generator = generate_data()
processed_data_generator = process_data(data_generator)

# データを順に取り出して処理する
for processed_item in processed_data_generator:
    print(processed_item)

シーケンス型: list, tuple, range

シーケンス型の操作方法をご覧いただきます。

  • シーケンスの共通操作
  • イミュータブルとミュータブルなシーケンス型
  • リスト型(list)の使い方
  • タプル型(tuple)の使い方
  • range型の使い方

シーケンスの共通操作

list, tuple, rangeなどのシーケンス型では、インデックスを使用して要素にアクセスしたり、スライスを使用して部分的にデータを取り出したりが可能です。

# リストの例
fruits = ["apple", "banana", "cherry", "date"]

# インデックスを使用して要素にアクセスする
print(fruits[0])  # Output: "apple"
print(fruits[2])  # Output: "cherry"

# スライスを使用して部分的なデータを取り出す
print(fruits[1:3])  # Output: ["banana", "cherry"]
print(fruits[:2])  # Output: ["apple", "banana"]
print(fruits[2:])  # Output: ["cherry", "date"]

# タプルの例
colors = ("red", "green", "blue", "yellow")

# インデックスを使用して要素にアクセスする
print(colors[0])  # Output: "red"
print(colors[3])  # Output: "yellow"

# スライスを使用して部分的なデータを取り出す
print(colors[1:3])  # Output: ("green", "blue")
print(colors[:2])  # Output: ("red", "green")
print(colors[2:])  # Output: ("blue", "yellow")

# 範囲の例
numbers = range(5)

# インデックスを使用して要素にアクセスする
print(numbers[0])  # Output: 0
print(numbers[3])  # Output: 3

# スライスを使用して部分的なデータを取り出す
print(list(numbers[1:4]))  # Output: [1, 2, 3]
print(list(numbers[:2]))  # Output: [0, 1]
print(list(numbers[2:]))  # Output: [2, 3, 4]

イミュータブルとミュータブルなシーケンス型

tupleはイミュータブル(変更不可)なシーケンス型であり、一度作成されたtupleは変更できません。

listはミュータブル(変更可能)であり、要素の追加、削除、変更が可能です。

# tupleの例
fruits = ("apple", "banana", "cherry")

# 要素へのアクセス
print(fruits[0])  # Output: "apple"
print(fruits[1])  # Output: "banana"

# イミュータブルなため、要素の変更は不可
# fruits[0] = "orange"  # エラー: 'tuple' object does not support item assignment

# listの例
colors = ["red", "green", "blue"]

# 要素へのアクセス
print(colors[0])  # Output: "red"
print(colors[1])  # Output: "green"

# ミュータブルなため、要素の変更が可能
colors[0] = "yellow"
print(colors)  # Output: ["yellow", "green", "blue"]

# 要素の追加
colors.append("orange")
print(colors)  # Output: ["yellow", "green", "blue", "orange"]

# 要素の削除
del colors[1]
print(colors)  # Output: ["yellow", "blue"]

# 要素の変更
colors[1] = "purple"
print(colors)  # Output: ["yellow", "purple"]

リスト型(list)の使い方

リストは角括弧[]を使用して作成します。

リストは異なる型の要素を含むことができるのも特徴です。

# リストの例
my_list = [1, 2, "three", 4.5, True]

# 要素へのアクセス
print(my_list[0])  # Output: 1
print(my_list[2])  # Output: "three"

# 要素の変更
my_list[1] = "two"
print(my_list)  # Output: [1, "two", "three", 4.5, True]

# リストの要素の追加
my_list.append(6)
print(my_list)  # Output: [1, "two", "three", 4.5, True, 6]

# リストの要素の削除
del my_list[3]
print(my_list)  # Output: [1, "two", "three", True, 6]

タプル型(tuple)の使い方

タプルは丸括弧()を使用して作成します。

# タプルの例
my_tuple = (1, 2, "three", 4.5, True)

# 要素へのアクセス
print(my_tuple[0])  # Output: 1
print(my_tuple[2])  # Output: "three"

# タプルの要素の変更(エラーになる)
my_tuple[1] = "two"  # TypeError: 'tuple' object does not support item assignment

# タプルの要素の追加(エラーになる)
my_tuple.append(6)  # AttributeError: 'tuple' object has no attribute 'append'

# タプルの要素の削除(エラーになる)
del my_tuple[3]  # TypeError: 'tuple' object doesn't support item deletion

range型の使い方

range型は、数値のシーケンスを表します。

これは通常、forループで繰り返しを行う際に使われることが多いです。

# rangeの例
my_range = range(1, 6)

# forループで繰り返し処理
for num in my_range:
    print(num)  # Output: 1, 2, 3, 4, 5

# rangeの要素へのアクセス
print(my_range[2])  # Output: 3

# rangeの要素の変更(エラーになる)
my_range[0] = 10  # TypeError: 'range' object does not support item assignment

# rangeの要素の追加(エラーになる)
my_range.append(6)  # AttributeError: 'range' object has no attribute 'append'

# rangeの要素の削除(エラーになる)
del my_range[2]  # TypeError: 'range' object doesn't support item deletion

バイナリシーケンス型: bytes, bytearray, memoryview

バイナリシーケンス型について、複数の操作方法を見ていきます。

  • バイトオブジェクトの操作
  • bytearrayオブジェクトの操作
  • bytesとbytearrayの共通操作
  • printf形式でのbytesの書式化

バイトオブジェクトの操作

bytesはイミュータブルなバイナリデータを表し、bytearrayはミュータブルなバイナリデータを表します。

ファイルの読み書きやネットワーク通信で使用されることが多いです。

# bytesの例
my_bytes = b"Hello"

# bytearrayの例
my_bytearray = bytearray(b"World")

# bytesの要素へのアクセス
print(my_bytes[0])  # Output: 72

# bytearrayの要素へのアクセス
print(my_bytearray[0])  # Output: 87

# bytesの要素の変更(エラーになる)
my_bytes[0] = 65  # TypeError: 'bytes' object does not support item assignment

# bytearrayの要素の変更
my_bytearray[0] = 84

# bytesの要素の追加(エラーになる)
my_bytes.append(111)  # AttributeError: 'bytes' object has no attribute 'append'

# bytearrayの要素の追加
my_bytearray.append(33)

# bytesの要素の削除(エラーになる)
del my_bytes[0]  # TypeError: 'bytes' object doesn't support item deletion

# bytearrayの要素の削除
del my_bytearray[0]

# bytesの内容の表示
print(my_bytes)  # Output: b"Hello"

# bytearrayの内容の表示
print(my_bytearray)  # Output: bytearray(b'orld!')

bytearrayオブジェクトの操作

bytearrayはbytesと同様ですが、要素を変更したり、要素を追加したりが可能です。

bytesとbytearrayの共通操作

両方の型で使用できるメソッドや操作には、スライス、連結、検索などがあります。

# bytearrayの作成
my_bytearray = bytearray(b"Hello")

# 要素へのアクセス
print(my_bytearray[0])  # Output: 72

# 要素の変更
my_bytearray[0] = 87

# 要素の追加
my_bytearray.append(33)

# bytearrayの内容の表示
print(my_bytearray)  # Output: bytearray(b'Wello!')

# インデックススライスによる部分的な変更
my_bytearray[1:3] = b"or"

# bytearrayの内容の表示
print(my_bytearray)  # Output: bytearray(b'World!')

# 要素の削除
del my_bytearray[0]

# bytearrayの内容の表示
print(my_bytearray)  # Output: bytearray(b'orld!')

# バイト値を追加
my_bytearray.extend([65, 66, 67])

# bytearrayの内容の表示
print(my_bytearray)  # Output: bytearray(b'orld!ABC')

printf形式でのbytesの書式化

printf形式の書式指定子を使用して、bytesオブジェクトを整形できます。

バイナリデータを人間が読みやすい形式で表示する際に便利です。

my_bytes = b"\x48\x65\x6c\x6c\x6f"  # バイナリデータ

# バイナリデータの整形表示
formatted = b"Value: %s" % my_bytes

print(formatted)  # Output: b'Value: Hello'

str型の注意点とトリビア

こちらでは、str型の重要な特性と、str型に関する興味深い情報を紹介します。

  • 文字列は不変(immutable)
  • Unicodeとエンコーディング

文字列は不変(immutable)

Pythonの文字列は不変です。

不変とは、一度作成した文字列は変更することができないということ。

新しい文字列を作成するたびに、Pythonは新しいメモリ領域を割り当てます。

大量の文字列操作をおこなう場合は、性能に影響を及ぼす可能性があることを頭に入れておきましょう。

Unicodeとエンコーディング

Pythonの文字列はUnicodeで表されます。

Unicodeは世界中のほぼすべての文字を表すことができる文字セットです。

しかしファイルやネットワーク通信で文字列を扱う場合、エンコーディング(Unicodeをバイト列に変換するプロセス)が重要になります。

Pythonでは、encode()メソッドを使って文字列をエンコードし、decode()メソッドを使ってバイト列をデコードできます。

text = "こんにちは"  # Unicode文字列

# 文字列のエンコード
encoded = text.encode("utf-8")

# バイト列のデコード
decoded = encoded.decode("utf-8")

print(encoded)  # Output: b'\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf'
print(decoded)  # Output: こんにちは

実践編:Pythonでの文字列操作の例

こちらでは、Pythonで文字列を操作する具体的な例をいくつか紹介します。

  • 名前と挨拶を組み合わせて表示するプログラム
  • CSVデータの簡単な処理
  • ユーザー入力を受け取って処理するプログラム

名前と挨拶を組み合わせて表示するプログラム

この例では、format()メソッドを使用して文字列内に名前を挿入し、挨拶メッセージを表示しています。

name = "Alice"
greeting = "Hello, {}!"
formatted_greeting = greeting.format(name)
print(formatted_greeting)

CSVデータの簡単な処理

この例では、CSVデータを処理し、各行から名前、年齢、都市を取得して表示しています。

csv_data = "name,age,city\nAlice,30,New York\nBob,28,Los Angeles"
lines = csv_data.split('\n')
for line in lines:
    name, age, city = line.split(',')
    print(f"{name} is {age} years old and lives in {city}.")

ユーザー入力を受け取って処理するプログラム

この例では、ユーザーから文を入力してもらい、その文が何語から構成されているかをカウントして表示しています。

user_input = input("Enter a sentence: ")
word_list = user_input.split()
word_count = len(word_list)
print(f"The sentence has {word_count} words.")

まとめ

当記事では、Pythonのstr型について学習してきました。

  • Pythonのstr型:非常に強力で多様な機能を持つ
  • テキストデータの操作は、データ分析、ウェブ開発、自動化など、多くの分野で重要なスキル
  • str型を理解し、そのメソッドや特性を活用することで、効率的なコードが書ける

Python公式ドキュメントや、オンラインのチュートリアル、書籍などを利用して、さらに深く学んでみることをお勧めします。

タイトルとURLをコピーしました