Python関数とクラス
この講座では、Pythonの関数とクラス、組み込み関数、組み込みクラスについて学びます。
- 関数の定義と引数
- デフォルト引数と戻り値
- 組み込み関数(型変換、ユーザ入力、集計・並べ替え)
- クラスとオブジェクト(
__init__,self) - メソッドの定義
- クラスの合成(オブジェクトを属性として持つ)
- 継承
- 組み込みクラス(文字列操作、ファイル操作)
1. 事前準備
この講座のハンズオンでは、以下のツールやアカウントが必要です。まだ準備できていない場合は、リンク先の手順に沿って準備をお願いします。
2. 関数の利用
これまでのプログラムでは、処理を上から順番に書いてきました。しかし、実際の開発では同じ処理をプログラムの中で何度も実行したい場面があります。例えば、ログインチェックのように、プログラムのあちこちで呼び出したい処理や、計算のように同じ処理で入力値だけを変えたい場合です。このようなとき、同じコードを何度もコピーするのではなく、関数として処理をまとめておくことで、必要なときに何度でも呼び出せるようになります。
2.1 関数の定義
関数は、処理をひとまとまりにして名前を付けたものです。def キーワードで定義します。
def 関数名():
# 処理
def の後に関数名を書き、括弧 () を付けて : で終えます。関数の中身はインデントして記述します。定義した関数は 関数名() で呼び出すことができます。
実際に試してみましょう。シンプルに、1 + 2 の足し算を行う関数を作ります。main.py に以下の内容を記述して実行してみましょう。
def add():
print(1 + 2)
# 関数の呼び出し
add()
実行すると以下のように出力されます。
3
この関数は呼び出すたびに「1 + 2」の結果を表示します。しかし、このままでは常に同じ計算しかできません。次のセクションで、計算する値を自由に変える方法を学びます。
2.2 引数
関数に値を渡すことで、処理の内容を動的に変更できます。関数に渡す値を引数と呼びます。
def 関数名(引数1, 引数2):
# 処理
括弧の中に引数名を記述します。複数の引数はカンマで区切ります。また、引数にデフォルト値を設定することもできます。呼び出し時に値が指定されなかった場合、デフォルト値が使用されます。
def 関数名(引数1, 引数2=デフォルト値):
# 処理
実際に試してみましょう。先ほどの足し算関数を改良して、足す数を引数として外から渡せるようにします。main.py に以下の内容を記述して実行してみましょう。
def add(a, b):
print(a + b)
add(1, 2)
add(10, 20)
add(100, 200)
実行すると以下のように出力されます。
3
30
300
引数を使うことで、1つの関数でさまざまな値の足し算ができるようになりました。
次に、デフォルト引数を試してみましょう。main.py に以下の内容を記述して実行してみましょう。
def add(a, b=10):
print(a + b)
add(5)
add(5, 20)
実行すると以下のように出力されます。
15
25
1回目の呼び出しでは b を省略しているため、デフォルト値の 10 が使われます。2回目の呼び出しでは b に 20 を指定しているため、デフォルト値の代わりに 20 が使われます。
2.3 戻り値
return を使って、関数の処理結果を呼び出し元に返すことができます。
def 関数名(引数):
return 戻り値
return の後に返したい値を書きます。これまでの例では関数の中で print() していましたが、戻り値を使うと計算結果を変数に格納して、呼び出し元で自由に活用できます。
実際に試してみましょう。main.py に以下の内容を記述して実行してみましょう。
def add(a, b):
return a + b
result = add(1, 2)
print(f"計算結果: {result}")
# 戻り値をそのまま別の計算に使う
total = add(10, 20) + add(30, 40)
print(f"合計: {total}")
実行すると以下のように出力されます。
計算結果: 3
合計: 100
3. 組み込み関数
Pythonには、あらかじめ用意されていてそのまま使える組み込み関数があります。これまでの講座でも print() や len() などを使ってきましたが、これらも組み込み関数の一種です。ここでは、その他でよく使われる型変換、ユーザ入力、集計に関する組み込み関数を紹介します。
3.1 型変換(int, str, float, bool)
プログラムでは、ある型の値を別の型に変換したい場面がよくあります。例えば、ユーザの入力(文字列)を数値として計算に使いたい場合や、数値を文字列に埋め込みたい場合です。Pythonでは、型名と同じ名前の組み込み関数を使って型変換を行います。
int()(整数への変換)
int(変換する値)
int() は引数に文字列(str)や小数(float)を受け取り、整数(int)に変換して返します。文字列の場合は数字のみで構成されている必要があり、小数の場合は小数点以下が切り捨てられます。
実際に試してみましょう。main.py に以下の内容を記述して実行してみましょう。
# 文字列 → 整数
age_str = "25"
age = int(age_str)
print(age + 5)
# 小数 → 整数(小数点以下は切り捨て)
price = 1980.7
print(int(price))
実行すると以下のように出力されます。
30
1980
str()(文字列への変換)
str(変換する値)
str() は引数に数値(int, float)やその他のオブジェクトを受け取り、文字列(str)に変換して返します。
count = 42
message = "注文数: " + str(count) + "件"
print(message)
実行すると以下のように出力されます。
注文数: 42件
| 💡 ポイント |
|---|
f文字列(f"注文数: {count}件")を使えば str() を使わずに数値を文字列に埋め込めます。str() は文字列の連結(+)を使う場面や、型を明示的に変換したい場合に使います。 |
float()(小数への変換)
float(変換する値)
float() は引数に文字列(str)や整数(int)を受け取り、浮動小数点数(float)に変換して返します。
# 文字列 → 小数
rate = float("3.14")
print(rate * 2)
# 整数 → 小数
num = float(10)
print(num)
実行すると以下のように出力されます。
6.28
10.0
bool()(真偽値への変換)
bool(変換する値)
bool() は引数を受け取り、その値が「真」か「偽」かを判定して True または False を返します。
# 空文字列・0・空リスト → False
print(bool(""))
print(bool(0))
print(bool([]))
# 値がある → True
print(bool("hello"))
print(bool(42))
print(bool([1, 2]))
実行すると以下のように出力されます。
False
False
False
True
True
True
| 💡 ポイント |
|---|
Pythonでは 0, "", [], {}, None が偽(False)、それ以外の値は真(True)と判定されます。この仕組みは if 文の条件判定でも同様に働くため、if len(my_list) > 0: の代わりに if my_list: と書けます。 |
型変換関数まとめ
| 関数 | 説明 | 例 |
|---|---|---|
int() |
整数に変換 | int("25") → 25 |
str() |
文字列に変換 | str(42) → "42" |
float() |
小数に変換 | float("3.14") → 3.14 |
bool() |
真偽値に変換 | bool("") → False |
3.2 ユーザ入力(input)
プログラムの実行中にユーザからキーボード入力を受け取るには input() 関数を使います。
input(表示するメッセージ)
input() は引数に表示するメッセージ(str)を受け取り、ユーザが入力した値を文字列(str)として返します。
実際に試してみましょう。main.py に以下の内容を記述して実行してみましょう。
name = input("名前を入力してください: ")
print(f"こんにちは、{name}さん!")
実行すると以下のようにメッセージが表示され、入力待ちの状態になります。
名前を入力してください:
ここで「田中」と入力して Enter キーを押すと、以下のように出力されます。
こんにちは、田中さん!
input()の戻り値は文字列
input() で受け取った値は、常に文字列(str型)です。数値として使用したい場合は、前のセクションで学んだ int() や float() で型変換を行う必要があります。
age_str = input("年齢を入力してください: ")
# str型のままでは計算できないため、int型に変換
age = int(age_str)
print(f"10年後の年齢は{age + 10}歳です")
実行例(「25」と入力した場合):
年齢を入力してください: 25
10年後の年齢は35歳です
| 💡 ポイント |
|---|
input() の戻り値は常に文字列です。数値の入力を期待している場合でも、ユーザが数字以外の文字列を入力すると int() で型変換する際にエラーが発生します。 |
3.3 集計・並べ替え(len, max, min, sum, sorted)
リストや文字列などのデータに対して、長さの取得や最大値・最小値の計算、合計、並べ替えを行う組み込み関数です。データ処理の基本となる関数で、実務でも頻繁に使用します。
len()(要素数・文字数の取得)
len(オブジェクト)
len() は引数にリスト・文字列・辞書などを受け取り、要素数や文字数を整数(int)で返します。
実際に試してみましょう。main.py に以下の内容を記述して実行してみましょう。
fruits = ["りんご", "バナナ", "オレンジ"]
print(f"フルーツの数: {len(fruits)}")
text = "Hello, Python!"
print(f"文字数: {len(text)}")
user = {"name": "田中太郎", "age": 25}
print(f"キーの数: {len(user)}")
実行すると以下のように出力されます。
フルーツの数: 3
文字数: 14
キーの数: 2
max() / min()(最大値・最小値の取得)
max(リスト)
min(リスト)
max() はリストや複数の引数の中から最大値を、min() は最小値を返します。文字列のリストの場合は辞書順(アルファベット順)で比較します。
scores = [85, 92, 78, 95, 88]
print(f"最高点: {max(scores)}")
print(f"最低点: {min(scores)}")
# 複数の引数を直接渡すこともできる
print(f"最大: {max(10, 25, 8)}")
実行すると以下のように出力されます。
最高点: 95
最低点: 78
最大: 25
sum()(合計値の計算)
sum(リスト)
sum() は引数に数値のリストを受け取り、すべての要素の合計値を返します。
prices = [1200, 800, 1500, 600]
total = sum(prices)
print(f"合計金額: {total}円")
print(f"平均金額: {total / len(prices)}円")
実行すると以下のように出力されます。
合計金額: 4100円
平均金額: 1025.0円
sorted()(並べ替え)
sorted(リスト)
sorted(リスト, reverse=True)
sorted() は引数にリストを受け取り、要素を昇順に並べ替えた新しいリストを返します。reverse=True を指定すると降順になります。元のリストは変更されません。
scores = [85, 92, 78, 95, 88]
ascending = sorted(scores)
print(f"昇順: {ascending}")
descending = sorted(scores, reverse=True)
print(f"降順: {descending}")
print(f"元のリスト: {scores}")
実行すると以下のように出力されます。
昇順: [78, 85, 88, 92, 95]
降順: [95, 92, 88, 85, 78]
元のリスト: [85, 92, 78, 95, 88]
| 📝 sorted() とリストの sort() の違い |
|---|
sorted() は元のリストを変更せず新しいリストを返す組み込み関数です。一方、リストの sort() メソッドは元のリストそのものを並べ替えます(戻り値は None)。元のデータを残したい場合は sorted() を使いましょう。 |
集計・並べ替え関数まとめ
| 関数 | 説明 | 例 |
|---|---|---|
len() |
要素数・文字数を取得 | len([1, 2, 3]) → 3 |
max() |
最大値を取得 | max([3, 1, 2]) → 3 |
min() |
最小値を取得 | min([3, 1, 2]) → 1 |
sum() |
合計値を計算 | sum([1, 2, 3]) → 6 |
sorted() |
並べ替えた新しいリストを返す | sorted([3, 1, 2]) → [1, 2, 3] |
4. クラスとオブジェクト
4.1 オブジェクト指向とは
オブジェクト指向とは、データとそれに関連する処理をひとまとめにした「オブジェクト」を中心にプログラムを構成する考え方です。例えば「人間」というオブジェクトには、名前や年齢といったデータと、自己紹介をするといった処理がセットで含まれます。
JavaやC#などの言語では、すべての処理をクラス(オブジェクトの設計図)の中に書く必要があります。一方、Pythonはオブジェクト指向をサポートしていますが、必ずしもクラスを使う必要はありません。これまでの講座で学んだように、関数だけでプログラムを書くこともできます。
Pythonでは、シンプルな処理は関数で書き、関連するデータと処理をまとめたい場合にクラスを使う、というように目的に応じて使い分けるのが一般的です。
4.2 クラスとは
クラスは、オブジェクトの設計図です。どのような属性(データ)とメソッド(処理)を持つかをクラスに定義し、そこから実体を作成して使用します。
クラスから作成された実体をオブジェクト(またはインスタンス)と呼びます。1つのクラスから複数のインスタンスを作成でき、それぞれが独立したデータを持ちます。
4.3 クラスの定義
クラスは class キーワードで定義します。
class クラス名:
# クラスの中身
定義したクラスからインスタンス(実体)を作成するには、クラス名() と括弧を付けて呼び出します。
変数名 = クラス名()
インスタンスに属性(データ)を持たせるには、インスタンス.属性名 = 値 の形式で設定します。設定した値には インスタンス.属性名 でアクセスできます。
実際に試してみましょう。「人間」を表すクラスを定義し、インスタンスを作成して値を設定します。main.py に以下の内容を記述して実行してみましょう。このプログラムは、空のクラスを定義してインスタンスに属性を直接設定するものです。
class Person:
pass
person = Person()
person.name = "田中太郎"
person.age = 25
print(person.name)
print(person.age)
実行すると以下のように出力されます。
田中太郎
25
pass は「何もしない」ことを意味するキーワードで、クラスの中身がまだないときに使います。ここでは Person クラスを定義し、person = Person() でインスタンスを作成しています。その後、person.name と person.age に値を設定し、同じ書き方で値にアクセスして表示しています。
このように、インスタンスを作成した後に属性を直接設定することもできますが、毎回手動で設定するのは手間がかかり、設定し忘れのリスクもあります。
init による初期化
__init__ メソッドを使うと、インスタンス作成時に自動的に属性を設定できます。
class クラス名:
def __init__(self, 引数1, 引数2):
self.属性名1 = 引数1
self.属性名2 = 引数2
__init__ はクラスのインスタンスが作成されるときに自動的に呼ばれる特別なメソッドで、コンストラクタと呼ばれます。名前の前後にあるアンダースコア2つ(__)は、Pythonが特別な意味を持つメソッドに付ける記法で、ダンダー(double underscoreの略)と呼ばれます。
self はインスタンス自身を指す変数です。self.name = name のように書くことで、引数で受け取った値をインスタンスの属性として保存できます。メソッドの第一引数には必ず self を記述する必要がありますが、呼び出し時には自動的に渡されるため、明示的に指定する必要はありません。
実際に試してみましょう。main.py に以下の内容を記述して実行してみましょう。このプログラムは、__init__を使ってインスタンス作成時に名前と年齢を設定するものです。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("田中太郎", 25)
print(person.name)
print(person.age)
実行すると以下のように出力されます。
田中太郎
25
__init__ を定義することで、Person("田中太郎", 25) のようにインスタンス作成と同時に値を設定できるようになりました。
4.4 メソッドの定義
メソッドは、クラスに紐づいた関数です。クラスの中で def を使って定義します。
class クラス名:
def メソッド名(self):
# 処理
メソッドの第一引数には必ず self を指定します。呼び出し時は インスタンス.メソッド名() のように使います。
実際に試してみましょう。先ほどの Person クラスにメソッドを追加します。main.py に以下の内容を記述して実行してみましょう。このプログラムは、人間クラスにメソッドを追加して自己紹介と成人判定を行うものです。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
return f"こんにちは、{self.name}です"
def is_adult(self):
return self.age >= 18
person1 = Person("田中太郎", 25)
print(person1.greet())
print(person1.is_adult())
person2 = Person("鈴木花子", 15)
print(person2.greet())
print(person2.is_adult())
実行すると以下のように出力されます。
こんにちは、田中太郎です
True
こんにちは、鈴木花子です
False
4.5 クラスの合成
クラスの属性として別のクラスのインスタンスを持たせることで、より複雑なデータ構造を表現できます。これをクラスの合成(コンポジション)と呼びます。
以下の図は、TeamクラスがPersonクラスのインスタンスを属性として持つコンポジションの関係を示しています。
classDiagram
class Team {
+team_name
+leader
+member_count
+show_detail()
}
class Person {
+name
+age
+greet()
}
Team *-- Person : leader
class クラスA:
def __init__(self, name):
self.name = name
class クラスB:
def __init__(self, クラスAのインスタンス):
self.属性名 = クラスAのインスタンス
__init__ の引数として別のクラスのインスタンスを受け取り、属性に保存します。これにより、クラスB のインスタンスから クラスA の属性やメソッドにアクセスできるようになります。
実際に試してみましょう。チーム情報の中に人間の情報を含める例です。main.py に以下の内容を記述して実行してみましょう。このプログラムは、人間クラスとチームクラスを組み合わせてチーム情報を表示するものです。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
return f"こんにちは、{self.name}です"
class Team:
def __init__(self, team_name, leader, member_count):
self.team_name = team_name
self.leader = leader
self.member_count = member_count
def show_detail(self):
print(f"チーム名: {self.team_name}")
print(f"リーダー: {self.leader.name}({self.leader.age}歳)")
print(f"リーダーの挨拶: {self.leader.greet()}")
print(f"メンバー数: {self.member_count}人")
# 人間のインスタンスを作成
leader = Person("田中太郎", 25)
# チーム情報に人間のインスタンスを渡す
team = Team("開発チーム", leader, 5)
team.show_detail()
実行すると以下のように出力されます。
チーム名: 開発チーム
リーダー: 田中太郎(25歳)
リーダーの挨拶: こんにちは、田中太郎です
メンバー数: 5人
| 💡 ポイント |
|---|
合成を使うことで、Team クラスが Person クラスの属性(name)やメソッド(greet())を活用できます。各クラスの責務を分離することで、コードの再利用性と保守性が向上します。 |
4.6 継承
継承は、既存のクラス(親クラス)の属性やメソッドを引き継いで、新しいクラス(子クラス)を作成する仕組みです。
以下の図は、Creatureクラスを親クラスとしてHumanクラスとDogクラスが継承する関係を示しています。
classDiagram
class Creature {
+name
+breathe()
}
class Human {
+age
+greet()
}
class Dog {
+breed
+bark()
}
Creature <|-- Human
Creature <|-- Dog
class 子クラス名(親クラス名):
# 子クラスの定義
子クラス名(親クラス名) のように括弧内に親クラスを指定することで、親クラスの属性やメソッドを引き継ぎます。子クラスでは、追加の属性やメソッドを定義できます。
実際に試してみましょう。生物クラスを親クラスとして、人間と犬のクラスを作成します。main.py に以下の内容を記述して実行してみましょう。このプログラムは、生物クラスを継承して人間クラスと犬クラスを作成するものです。
class Creature:
def __init__(self, name):
self.name = name
def breathe(self):
return f"{self.name}は呼吸しています"
class Human(Creature):
def __init__(self, name, age):
super().__init__(name)
self.age = age
def greet(self):
return f"こんにちは、{self.name}です({self.age}歳)"
class Dog(Creature):
def __init__(self, name, breed):
super().__init__(name)
self.breed = breed
def bark(self):
return f"{self.name}({self.breed}): ワン!"
# 人間のインスタンス
human = Human("田中太郎", 25)
print(human.breathe())
print(human.greet())
# 犬のインスタンス
dog = Dog("ポチ", "柴犬")
print(dog.breathe())
print(dog.bark())
実行すると以下のように出力されます。
田中太郎は呼吸しています
こんにちは、田中太郎です(25歳)
ポチは呼吸しています
ポチ(柴犬): ワン!
Human(Creature) のように書くことで、Creature クラスの属性やメソッドを引き継ぐことができます。人間も犬も breathe() メソッドを持っているのは、親クラスの Creature から継承しているためです。
| 📝 super() について |
|---|
super() は親クラスを参照するための関数です。super().__init__() と書くことで、親クラスの __init__ メソッドを呼び出し、親クラスの属性を初期化できます。これにより、共通の処理を親クラスに集約し、子クラスでは追加の属性やメソッドだけを定義すれば済みます。 |
5. 組み込みクラス
Pythonの str(文字列)や list(リスト)などは、あらかじめ用意された組み込みクラスです。これらのクラスから作られたオブジェクトには便利なメソッドが備わっており、前のセクションで学んだように オブジェクト.メソッド名() の形式で呼び出せます。前の講座で学んだリストの append() や辞書の get() も、組み込みクラスのメソッドです。ここでは、文字列操作メソッドとファイル操作を紹介します。
| 📝 メソッドと関数の違い |
|---|
メソッドは特定のクラスに紐づいた操作で、オブジェクト.メソッド名() の形式で呼び出します(例: "hello".upper())。一方、「組み込み関数」セクションで紹介した組み込み関数はどのクラスにも属さない独立した操作で、関数名(引数) の形式で直接呼び出します(例: len("hello"))。 |
5.1 文字列操作メソッド
Pythonの文字列(str型)には、操作のための便利なメソッドが組み込まれています。データの加工やテキスト処理などで頻繁に使用します。
split()(文字列の分割)
文字列.split(区切り文字)
split() は引数に区切り文字(str)を1つ受け取り、その文字で分割した結果をリスト(list)として返します。引数を省略すると空白文字(スペース、タブ、改行)で分割します。
main.py に以下の内容を記述して実行してみましょう。このプログラムは、CSV形式の文字列をカンマで分割して各項目を表示するものです。
csv_line = "田中太郎,25,東京,プログラミング"
parts = csv_line.split(",")
print(f"名前: {parts[0]}")
print(f"年齢: {parts[1]}")
print(f"都市: {parts[2]}")
print(f"趣味: {parts[3]}")
実行すると以下のように出力されます。
名前: 田中太郎
年齢: 25
都市: 東京
趣味: プログラミング
join()(文字列の結合)
区切り文字.join(リスト)
join() は引数に文字列のリスト(list)を1つ受け取り、各要素を区切り文字でつなげた1つの文字列(str)を返します。split() の逆の操作にあたります。
fruits = ["りんご", "バナナ", "オレンジ"]
result = ", ".join(fruits)
print(result)
実行すると以下のように出力されます。
りんご, バナナ, オレンジ
replace()(文字列の置換)
文字列.replace(置換前, 置換後)
replace() は第1引数に置換前の文字列、第2引数に置換後の文字列を受け取り、すべての一致箇所を置換した新しい文字列(str)を返します。元の文字列は変更されません。
text = "Hello, World!"
new_text = text.replace("World", "Python")
print(new_text)
実行すると以下のように出力されます。
Hello, Python!
upper() / lower()(大文字・小文字変換)
文字列.upper()
文字列.lower()
upper() は文字列内のすべてのアルファベットを大文字に変換した新しい文字列を返します。lower() はすべてを小文字に変換します。どちらも引数を取らず、元の文字列は変更されません。
text = "Hello, Python!"
print(text.upper())
print(text.lower())
実行すると以下のように出力されます。
HELLO, PYTHON!
hello, python!
startswith() / endswith()(先頭・末尾の判定)
文字列.startswith(検索文字列)
文字列.endswith(検索文字列)
startswith() は文字列が引数で指定した文字列で始まるかどうかを判定し、True または False を返します。endswith() は末尾が一致するかを判定します。
files = ["report.txt", "data.csv", "image.png", "notes.txt"]
txt_files = []
for f in files:
if f.endswith(".txt"):
txt_files.append(f)
print(f"テキストファイル: {txt_files}")
実行すると以下のように出力されます。
テキストファイル: ['report.txt', 'notes.txt']
主要な文字列メソッドまとめ
ここまで紹介した文字列メソッドの一覧です。
| メソッド | 説明 | 例 |
|---|---|---|
split() |
文字列を分割してリストを返す | "a,b,c".split(",") → ["a", "b", "c"] |
join() |
リストを結合して文字列を返す | ",".join(["a","b"]) → "a,b" |
replace() |
文字列を置換 | "hello".replace("l", "r") → "herro" |
upper() |
大文字に変換 | "hello".upper() → "HELLO" |
lower() |
小文字に変換 | "HELLO".lower() → "hello" |
strip() |
前後の空白・改行を除去 | " hello ".strip() → "hello" |
startswith() |
先頭一致判定 | "report.txt".startswith("report") → True |
endswith() |
末尾一致判定 | "data.csv".endswith(".csv") → True |
5.2 ファイル操作(open, with文)
Pythonではファイルの読み書きに open() 関数を使います。open() はファイルオブジェクトを返し、read() や write() といったメソッドで操作します。
open関数の基本
open(ファイル名, モード)
第1引数にファイル名、第2引数にモード(どのような操作を行うか)を指定します。主なモードは以下のとおりです。
| モード | 意味 | 説明 |
|---|---|---|
"r" |
読み込み(read) | ファイルの内容を読み取る(デフォルト) |
"w" |
書き込み(write) | ファイルに書き込む(既存の内容は上書きされる) |
"a" |
追記(append) | ファイルの末尾に追記する |
open() で開いたファイルは、使い終わったら閉じる必要があります。閉じ忘れを防ぐために、Pythonでは with文 を使うのが一般的です。with 文を使うと、ブロックを抜けたときにファイルが自動的に閉じられます。
with open("ファイル名", "モード") as 変数名:
# この中でファイル操作を行う
# ブロックを抜けるとファイルが自動的に閉じられる
as の後の変数名にファイルオブジェクトが代入され、ブロック内でファイルの読み書きを行います。
ファイルの読み込み
ファイルの内容をまとめて読み込むには read() メソッドを使います。
変数名.read()
read() は引数を取らず、ファイルの内容全体を1つの文字列(str)として返します。ファイル内の改行もそのまま文字列に含まれます。
実際にファイルの読み込みを試してみましょう。まず、読み込み用のテキストファイルを作成します。main.py と同じフォルダに fruits.txt という名前でファイルを作成してください。
├── main.py
└── fruits.txt ← このファイルを作成
作成したファイルに以下の内容を記述して保存します。
りんご
バナナ
オレンジ
ぶどう
次に、main.py に以下の内容を記述して実行してみましょう。このプログラムは、テキストファイルの内容を読み込んで表示するものです。
with open("fruits.txt", "r") as f:
content = f.read()
print(content)
| 💡 ポイント |
|---|
fruits.txt と main.py は同じフォルダに配置してください。異なるフォルダにある場合、FileNotFoundError が発生します。 |
実行すると以下のように出力されます。
りんご
バナナ
オレンジ
ぶどう
1行ずつ読み込む
ファイルを1行ずつ読み込むには readlines() メソッドを使います。
変数名.readlines()
readlines() は引数を取らず、ファイルの各行を要素としたリスト(list)を返します。たとえば3行のファイルであれば、3つの要素を持つリストになります。各要素の末尾には改行文字(\n)が含まれるため、表示時は strip() で除去するのが一般的です。
| 📝 strip() とは |
|---|
strip() は文字列の前後にある空白や改行文字(\n)を取り除くメソッドです。たとえば "りんご\n".strip() は "りんご" を返します。readlines() で取得した各行には末尾に \n が付いているため、strip() で取り除いてから表示するときれいに出力できます。 |
main.py に以下の内容を記述して実行してみましょう。このプログラムは、ファイルを1行ずつ読み込んで整形して表示するものです。
with open("fruits.txt", "r") as f:
lines = f.readlines()
for line in lines:
print(f"フルーツ: {line.strip()}")
実行すると以下のように出力されます。
フルーツ: りんご
フルーツ: バナナ
フルーツ: オレンジ
フルーツ: ぶどう
ファイルへの書き込み
ファイルに文字列を書き込むには write() メソッドを使います。
変数名.write(書き込む文字列)
write() は引数に書き込みたい文字列(str)を1つ受け取り、その文字列をファイルに書き込みます。戻り値として書き込んだ文字数(int)を返します。write() は改行を自動で追加しないため、改行したい場合は文字列の末尾に \n を付けます。また、open() のモードによって動作が異なり、"w" は既存の内容を上書きし、"a" は末尾に追記します。
ファイルへの書き込みを試してみましょう。main.py に以下の内容を記述して実行してみましょう。このプログラムは、ファイルへの書き込みと追記を行い、その結果を読み込んで表示するものです。
# 日記ファイルへの書き込み(上書き)
with open("diary.txt", "w") as f:
f.write("2025-01-15 今日はPythonを勉強した\n")
f.write("2025-01-16 リストと辞書を学んだ\n")
# 日記ファイルへの追記
with open("diary.txt", "a") as f:
f.write("2025-01-17 関数について学んだ\n")
# 書き込んだ内容を確認
with open("diary.txt", "r") as f:
print(f.read())
実行すると以下のように出力されます。
2025-01-15 今日はPythonを勉強した
2025-01-16 リストと辞書を学んだ
2025-01-17 関数について学んだ
6. まとめ
この講座では、Pythonの関数とクラス、組み込み関数、組み込みクラスについて学びました。
- 関数は
defで定義し、引数・デフォルト引数・戻り値を活用できる - 型変換関数(
int,str,float,bool)で値の型を変換できる - input() でユーザからのキーボード入力を受け取れる(戻り値は常に文字列)
- 集計・並べ替え関数(
len,max,min,sum,sorted)でデータを集計・ソートできる - クラスは
classキーワードで定義し、__init__でインスタンスを初期化する - self はインスタンス自身を参照するための変数
- メソッドはクラスに紐づいた関数で、インスタンスの属性を操作できる
- クラスの合成により、オブジェクトを属性として持たせて複雑な構造を表現できる
- 継承により、親クラスの属性とメソッドを子クラスに引き継げる
- 組み込みクラスの文字列メソッド(
split,replace,joinなど)でデータ加工ができる open()とwith文で安全にファイルの読み書きができる