自前の python 講座用資料です.
元から python にて用意されている,インポートや定義しなくても使える組み込み関数は,version 3.9 においては全部で 69 種類あります.
この中にはあまり使わない関数もあるため,良く使われる 37 種類の組み込み関数について紹介いたします.
注意:すべてについては説明せず,よく使われる処理を優先的に記載いたします.
この記事は,主に以下の公式ドキュメントを参考にしています.
以下のコードは,こちらの github にも保存していますので,ご参考ください.
一覧
idx | title | idx | title |
---|---|---|---|
1. | print(): 出力関数 | 21. | len(): 要素数/長さを取得 |
2. | input(): 入力関数 | 22. | max(): 最大値を取得 |
3. | int(): 整数型へキャスト | 23. | min(): 最小値を取得 |
4. | bool(): bool 型へキャスト | 24. | all(): 全ての要素に対する判定 |
5. | float(): 64 bit 浮動小数点型へキャスト | 25. | any(): いずれかの要素に対する判定 |
6. | str(): 文字列型へキャスト | 26. | range(): 数のイミュータブルなシーケンスを指定長にて作成 |
7. | complex(): 複素数型へキャスト | 27. | sorted(): ソート結果を取得 |
8. | abs(): 絶対値の取得 | 28. | slice(): スライスを取得 |
9. | round(): 指定する桁を偶数丸め | 29. | iter(): イテレータ作成 |
10. | divmod(): 商と余りのタプルを取得 | 30. | reversed(): 要素を逆順に取り出すイテレータを取得 |
11. | sum(): 総和を取得 | 31. | next(): イテレータの次の要素を取得 |
12. | pow(): べき乗計算 | 32. | enumerate(): enumerate オブジェクトを取得 |
13. | type(): オブジェクトの型を取得 | 33. | zip(): それぞれのイテラブルから要素を集めたイテレータを作成 |
14. | isinstance(): 型の判定 | 34. | map(): マップ型へキャスト |
15. | dir(): オブジェクトの有効な属性のリストを返す | 35. | eval(): 文字列型の式の演算結果を取得 |
16. | help(): ヘルプを開始/表示 | 36. | exec(): 文字列型の式を演算 |
17. | list(): リスト型へキャスト | 37. | open(): ファイルを開く |
18. | tuple(): タプル型へキャスト | ||
19. | set(): 集合型へキャスト | ||
20. | dict(): 辞書型へキャスト |
- print(): 出力関数
- input(): 入力関数
- int(): 整数型へキャスト
- bool(): bool 型へキャスト
- float(): 64 bit 浮動小数点型へキャスト
- str(): 文字列型へキャスト
- complex(): 複素数型へキャスト
- abs(): 絶対値の取得
- round(): 指定する桁を偶数丸め
- divmod(): 商と余りのタプルを取得
- sum(): 総和を取得
- pow(): べき乗計算
- type(): オブジェクトの型を取得
- isinstance(): 型の判定
- dir(): オブジェクトの有効な属性のリストを返す
- help(): ヘルプを開始/表示
- list(): リスト型へキャスト
- tuple(): タプル型へキャスト
- set(): 集合型へキャスト
- dict(): 辞書型へキャスト
- len(): 要素数/長さを取得
- max(): 最大値を取得
- min(): 最小値を取得
- all(): 全ての要素に対する判定
- any(): いずれかの要素に対する判定
- range(): 数のイミュータブルなシーケンスを指定長にて作成
- sorted(): ソート結果を取得
- slice(): スライスを取得
- iter(): イテレータ作成
- reversed(): 要素を逆順に取り出すイテレータを取得
- next(): イテレータの次の要素を取得
- enumerate(): enumerate オブジェクトを取得
- zip(): それぞれのイテラブルから要素を集めたイテレータを作成
- map(): マップ型へキャスト
- eval(): 文字列型の式の演算結果を取得
- exec(): 文字列型の式を演算
- open(): ファイルを開く
- Python のおすすめの学習方法
print(): 出力関数
print(*objects, sep=" ", end="\n", file=sys.stdout, flush=False)
:objects
を sep
で区切りながらテキストストリーム file
に表示し,最後に end
を表示します.キーワード無しの引数は全て,str()
がするように文字列に変換され,sep
で区切られながらストリームに書き出され,最後に end
が続きます.sep
と end
は両方とも文字列でなければなりません.
print("hello world")
# hello world
print("hello", "world")
# hello world
print("hello", "world", sep="-------")
# hello-------world
print("hello", end="...")
print("world")
# hello...world
input(): 入力関数
input(prompt)
:
引数 prompt
が存在すれば,それが末尾の開業を除いて標準出力に書き出されます.次に,この関数は入力から1行を読み込み,文字列に変換して(末尾の開業を除いて)返します.EOF が読み込まれたとき,EOFError
が送出されます.
input()
>>> hello
# 'hello'
input("hello ")
>>> hello world
# 'world'
int(): 整数型へキャスト
int(x)
または int(x, base=10)
:
数値または文字列 x
から生成された整数オブジェクトを返します.引数が与えられない場合には 0 を返します.
int(1), int(-1), int("1"), int(0.999), int(float(1)), int()
# (1, -1, 1, 0, 1, 0)
bool(): bool 型へキャスト
(
bool(1),
bool(0),
bool(-100),
bool(100),
bool(1+1j),
bool(""),
bool(" ")
)
# (True, False, True, True, True, False, True)
False
は以下の真理値判定手続きに基づくとのことで,これら以外は True
(https://docs.python.org/ja/3.7/library/stdtypes.html#truth) .
- 偽であると定義されている定数
- 数値型におけるゼロ
- 空のシーケンスまたはコレクション
float(): 64 bit 浮動小数点型へキャスト
float(x)
:
数または文字列 x
から生成された浮動小数点数を返します.引数が文字列の場合,10進数を含んだ文字列にしてください.
float(1), float("-1"), float(1+2), float()
# (1.0, -1.0, 3.0, 0.0)
str(): 文字列型へキャスト
str(object="")
または str(object=b"", encoding="utf-8", errors="strict")
:object
の文字列版を返します.object
が与えられなかった場合,空文字列が返されます.encoding
か errors
の少なくとも一方が与えられた場合,object
は例えば bytes や bytearray の byte-like object でなければなりません.
str(123), str(), float(str(int(3.14)))
# ('123', '', 3.0)
complex(): 複素数型へキャスト
complex(real, imag)
:
値 real + imag*j
の複素数を返すか,文字列や数を複素数に変換します.第一引数が文字列なら,それが複素数と解釈され,この関数は第二引数なしで呼び出さなければなりません.第二引数は文字列であってはなりません.それぞれの引数は(複素数を含む)任意の数値型です.imag
が省略された場合,標準の値はゼロで,このコンストラクタは int
や float
のような数値変換として働きます.両方の引数が省略された場合,0j
を返します.引数に文字列を取る場合は,この文字列が複素数型ライクにする必要があり,かつ,実部と虚部の間の符号の前後に半角スペースを入れると TypeError
になるので注意.
complex(1, 1), complex("1+1j")
((1+1j), (1+1j))
complex("1 + 1j")
# ---------------------------------------------------------------------------
# ValueError Traceback (most recent call last)
# ~\AppData\Local\Temp/ipykernel_10324/2440202854.py in <module>
# ----> 1 complex("1 + 1j")
#
# ValueError: complex() arg is a malformed string
abs(): 絶対値の取得
abs(x)
:x
の絶対値を返します.引数が複素数である場合はノルム(複素平面上における複素ベクトルの長さ)を返します.
abs(5), abs(-5), abs(1+1j)
# (5, 5, 1.4142135623730951)
最後の出力は \(\sqrt{2} = 1.41421356…\) です.
round(): 指定する桁を偶数丸め
round(number, ndigits)
:number
の小数部を ndigits
桁に丸めた値を返します.ndigits
が省略されたり None
だった場合,入力値に最も近い整数を返します.round()
をサポートする組み込み型では,値は 10 のマイナス ndigits
乗の倍数の中で最も近いものに丸められます.二つの倍数が同じだけ近いなら,偶数を選ぶ方に丸められます(偶数丸め,銀行丸め).ndigits
には任意の整数値が有効となります.返り値は ndigits
が指定されていないか None
の場合は整数,そうでなければ返り値は number
と同じ型です.
round(1), round(3.14), round(0.999, 2), round(135, -1), round(0.5), round(0.501), round(0.501, 1)
# (1, 3, 1.0, 140, 0, 1, 0.5)
divmod(): 商と余りのタプルを取得
divmod(a, b)
:
複素数でない 2 つの数を引数として取り,整数の除去を行った時の商と余りからなるペアを返します.この返り値は,(a // b, a % b)
と同じです.
divmod(5, 3)
# (1, 2)
divmod(2**16 - 1, 17)
# (3855, 0)
sum(): 総和を取得
sum(iterable, start)
:start
と iterable
の要素を左から右へ合計し,総和を返します.start
はデフォルトで 0
です.iterable
の要素は通常は数値で,start
の値は文字列であってはなりません.
sum((1,2)), sum([1, 2]), sum(range(5)), sum([0,0], 11)
# (3, 3, 10, 11)
pow(): べき乗計算
pow(x, y, z)
:x
の y
乗を返し,これは x**y
と等価です.z
があれば,x
の y
乗に対する z
の余りを返し,これは pow(x, y) % z
と同じ結果になりますが,前者の方がより効率よく計算されます.
pow(2, 8), pow(2, 3, 3), pow(2.718281828459045235360287471352, 3.141592653589793238462643j)
# (256, 2, (-1+1.2246467991473532e-16j))
pow(2, 8) == 2**8, pow(2, 3, 3)==2**3 % 3
# (True, True)
type(): オブジェクトの型を取得
type(object)
または type(name, bases, dict)
:
引数が 1 つだけの場合,object
の型を返します.返り値は型オブジェクトで,一般に object.__class__
によって返されるのと同じオブジェクトです.オブジェクトの型の判定には,isinstance()
関数を使うことが推奨されます.これはサブクラスを考慮するからです.
引数が 3 つの場合,新しい型オブジェクトを返します.本質的には class
文の動的な形式です.name
文字列はクラス名で,__name__
属性になります.bases
タプルは基底クラスの羅列で,__bases__
属性になります.dict
はクラス本体の定義を含む名前空間で,標準の辞書にコピーされて __dict__
属性になります.
type(1), type(1.0), type(True), type(1j), type(None)
# (int, float, bool, complex, NoneType)
new_type = type("x", (object,), {"a": 1})
new_type
# __main__.x
new_type.a
# 1
type(new_type)
# type
isinstance(): 型の判定
isinstance(object, classinfo)
:object
引数が classinfo
引数のインスタンスであるか,サブクラスのインスタンスの場合に True
を返します.object
が与えられた方のオブジェクトでない場合,この関数は常に False
を返します.classinfo
が型オブジェクトのタプルの場合,object
がそれらのいずれかのインスタンスであれば True
を返します.classinfo
が型や方からなるタプル,あるいは複数のタプルのいずれでもない場合,TypeError
が送出されます.
a = "test"
b = 1
isinstance(a, str), isinstance(b, int), isinstance(b, float), isinstance(b, (str, int, float))
# (True, True, False, True)
dir(): オブジェクトの有効な属性のリストを返す
dir(object)
:
引数が無い場合,現在のローカルスコープにある名前のリストを返します.引数がある場合,そのオブジェクトの有効な属性のリストを返そうと試みます.
print(dir(int(-1)))
# ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__',
# '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__',
# '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__',
# '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__',
# '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__',
# '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__',
# '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__',
# '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__',
# '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__',
# '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio',
# 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator',
# 'real', 'to_bytes']
int(1).__abs__()
# 1
print(dir())
# ['In', 'Out', '_', '_10', '_11', '_12', '_13', '_14', '_15', '_16', '_17', '_18', '_19',
# '_2', '_20', '_21', '_23', '_3', '_4', '_5', '_6', '_7', '_8', '__', '___', '__builtin__',
# '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '_dh',
# '_i', '_i1', '_i10', '_i11', '_i12', '_i13', '_i14', '_i15', '_i16', '_i17', '_i18',
# '_i19', '_i2', '_i20', '_i21', '_i22', '_i23', '_i24', '_i3', '_i4', '_i5', '_i6', '_i7',
# '_i8', '_i9', '_ih', '_ii', '_iii', '_oh', 'a', 'b', 'exit', 'get_ipython', 'new_type', 'quit']
先ほど変数定義した,a, b, new_type
が含まれていますね.
help(): ヘルプを開始/表示
help(object)
:object
のヘルプを表示します.引数が与えられていない場合,対話的ヘルプシステムはインタプリタコンソール上で起動します.
help(abs)
# Help on built-in function abs in module builtins:
#
# abs(x, /)
# Return the absolute value of the argument.
a = None
help(a)
# Help on NoneType object:
#
# class NoneType(object)
# | Methods defined here:
# |
# | __bool__(self, /)
# | self != 0
# |
# | __repr__(self, /)
# | Return repr(self).
# |
# | ----------------------------------------------------------------------
# | Static methods defined here:
# |
# | __new__(*args, **kwargs) from builtins.type
# | Create and return a new object. See help(type) for accurate signature.
list(): リスト型へキャスト
list(iterable)
:iterable
のリストを返します.
list([0, 1])
# [0, 1]
list((0, 1))
# [0, 1]
tuple(): タプル型へキャスト
tuple(iterable)
:iterable
のタプルを返します.
tuple([0, 1])
# (0, 1)
set(): 集合型へキャスト
set(iterable)
:
オプションで iterable
の要素を持つ,新しい set
オブジェクトを返します.
set([0, 1, 1, 0, -1])
# {-1, 0, 1}
set("""
はは は は は いい
""")
# {'\n', '\u3000', 'い', 'は'}
set("I think that that that that that boy wrote is wrong.")
# {' ', '.', 'I', 'a', 'b', 'e', 'g', 'h', 'i', 'k', 'n', 'o',
# 'r', 's', 't', 'w', 'y'}
dict(): 辞書型へキャスト
dict(**kwarg)
または dict(mapping, **kwarg)
または dict(iterable, **kwarg)
: 新しい辞書を作成します.
1 つ目は,dict(key=value)
とすることにより辞書を作成します.
2 つ目は,dict(zip(key_list, value_list))
とすることにより辞書を作成します.
3 つ目は,dict([(key, value]))
とすることにより辞書を作成します.
dict(map("1",1))
# ---------------------------------------------------------------------------
# TypeError Traceback (most recent call last)
# ~\AppData\Local\Temp/ipykernel_10324/3483618521.py in <module>
# ----> 1 dict(map("1",1))
#
# TypeError: 'int' object is not iterable
# dict(**kwarg)
dict(a=0, b=1, c=2)
# {'a': 0, 'b': 1, 'c': 2}
# dict(mapping, **kwarg)
k = ["a", "b", "c"]
v = [0, 1, 2]
dict(zip(k, v))
# {'a': 0, 'b': 1, 'c': 2}
# dict(iterable, **kwarg)
dict([("a", 0), ("b", 1), ("c", 2)])
# {'a': 0, 'b': 1, 'c': 2}
len(): 要素数/長さを取得
len(s)
:
オブジェクト s
の長さ(要素の数)を返します.引数はシーケンスかコレクションです.
a = "test"
len(a)
# 4
a = [0, 1, 2, 3]
len(a)
# 4
a = {"a": 0, "b": 1}
len(a)
# 2
a = [[0, 1, 2, 3]]
len(a)
# 1
max(): 最大値を取得
max(iterable, key, default)
または max(arg1, arg2, *args, key)
:iterable
の中で最大の要素,または 2 つ以上の引数の中で最大のものを返します.
a = [0, 1, 2]
max(a)
# 2
max(0, 1, 2)
# 2
max(True, False, -1)
# True
max("6", "1", 1)
# ---------------------------------------------------------------------------
# TypeError Traceback (most recent call last)
# ~\AppData\Local\Temp/ipykernel_10324/4041100510.py in <module>
# ----> 1 max("6", "1", 1)
#
# TypeError: '>' not supported between instances of 'int' and 'str'
max(1, None)
# ---------------------------------------------------------------------------
# TypeError Traceback (most recent call last)
# ~\AppData\Local\Temp/ipykernel_10324/2608310793.py in <module>
# ----> 1 max(1, None)
#
# TypeError: '>' not supported between instances of 'NoneType' and 'int'
大小関係が比較できない場合は,TypeError
が送出されます.None
はゼロでなく空なので,数値と比較することができません.
min(): 最小値を取得
min(iterable, key, default)
または min(arg1, arg2, *args, key)
:iterable
の中で最小の要素,または 2 つ以上の引数の中で最小のものを返します.性質や使い方は max()
と同様です.
min(0, 1, 2, -1)
# -1
all(): 全ての要素に対する判定
all(iterable)
:iterable
の全ての要素が真,もしくは,空であれば True
を返します.
(
all([True]),
all((0,1)),
all([True is True, False is False, True is not False])
)
# (True, False, True)
any(): いずれかの要素に対する判定
any(iterable)
:iterable
のいずれかの要素が真ならば True
を返します.iterable
が空なら False
を返します.
(
any([True]),
any((0,1)),
any([True is True, False is False, True is not False])
)
# (True, True, True)
range(): 数のイミュータブルなシーケンスを指定長にて作成
range(stop)
または range(start, stop, step)
:
range 型は,下図のイミュータブルなシーケンスを表し,一般に for ループにおいて特定の回数のループに使われます.引数は整数である必要があります.
range(0, 10)
# range(0, 10)
list(range(0, 10))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
tuple(range(0, 5))
# (0, 1, 2, 3, 4)
list(range(15, -3, -4))
# [15, 11, 7, 3, -1]
sorted(): ソート結果を取得
sorted(iterable, *, key=None, reverse=False)
:iterable
の要素を並び替えた新たなリストを返します.key
には 1 引数関数を指定します.これは iterable
の各要素から比較キーを展開するのにつかわれます.デフォルト値は None
です.
引数 reverse
は真偽値です.True
がセットされた場合,リストの要素は個々の比較が反転したものとして並び替えられます.
a = [1, 0, 3, -5, -10]
sorted(a)
# [-10, -5, 0, 1, 3]
sorted(a, reverse=True)
# [3, 1, 0, -5, -10]
slice(): スライスを取得
slice(stop)
または slice(start, stop, step)
:range(start, stop, step)
で指定されるインデックスの集合を表す,スライスオブジェクトを返します.引数 start
および step
はデフォルトでは None
です.スライスオブジェクトは読み出し専用の属性 start, stop, step
を持ち,これらはたんに引数で使われた値を返します.
slice(10)
# slice(None, 10, None)
slice(0, 10, 1)
# slice(0, 10, 1)
a = [0, 1, 2, 3, 4]
a[slice(0, 3, 1)]
# [0, 1, 2]
a = [0, 1, 2, 3, 4]
a[slice(0, 3, 1)]==a[0:3:1]
# True
iter(): イテレータ作成
iter(object, sentinel)
:
イテレータオブジェクトを返します.第二引数があるかどうかで,第一引数の解釈は大きく異なります.第二引数が無い場合,object
は反復プロトコル __iter__()
メソッドか,シーケンスプロトコルをサポートする集合オブジェクトでなければなりません.
第二引数 sentinel
が与えられているなら,object
は呼び出し可能オブジェクトでなければなりません.
iter([0,10])
# <list_iterator at 0x229d8318f10>
iter((0,10))
# <tuple_iterator at 0x229d83180a0>
list(iter([0,10]))
# [0, 10]
list(iter(range(10)))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
reversed(): 要素を逆順に取り出すイテレータを取得
reversed(seq)
:
要素を逆順に取り出すイテレータを返します.seq
は __reversed()
メソッドを持つか,シーケンス型プロトコルをサポートするオブジェクトでなければなりません.
reversed([0, 2, 1])
# <list_reverseiterator at 0x229d83181f0>
list(reversed([0, 2, 1]))
# [1, 2, 0]
next(): イテレータの次の要素を取得
next(iterator, default)
:iterator
の __next__()
メソッドと呼び出すことにより,次の要素を取得します.イテレータが尽きている場合,default
が与えられていればそれが返され,そうでなければ StopIeration
が送出されます.
a = ["1", "2", "3"]
b = iter(a)
b
# <list_iterator at 0x229d834d160>
next(b)
# '1'
next(b)
# '2'
next(b)
# '3'
next(b)
# ---------------------------------------------------------------------------
# StopIteration Traceback (most recent call last)
# ~\AppData\Local\Temp/ipykernel_10324/973617480.py in <module>
# ----> 1 next(b)
#
# StopIteration:
a = ["1", "2", "3"]
b = iter(a)
next(b, "end")
# '1'
next(b, "end")
# '2'
next(b, "end")
# '3'
next(b, "end")
# 'end'
next(b, "end")
# 'end'
enumerate(): enumerate オブジェクトを取得
enumerate(iterable, start=0)
: enumerate オブジェクトを返します.リスト化には,list 関数を用います.
a = ["a", "b", "c"]
b = enumerate(a)
b
# <enumerate at 0x229d83317c0>
例えばリスト化すると,インデックスと要素のペアをタプルで返します.
list(b)
# [(0, 'a'), (1, 'b'), (2, 'c')]
zip(): それぞれのイテラブルから要素を集めたイテレータを作成
zip(*iterables)
:
それぞれのイテラブルから要素を集めたイテレータを作ります.
この関数はタプルのイテレータを返し,その i
番目のタプルは引数シーケンスまたはイテラブルそれぞれの i
番目の要素を含みます.
a = [0, 1, 2]
b = ["b", "bb", "bbb"]
ab = zip(a, b)
ab
# <zip at 0x229d7e0e900>
list(ab)
# [(0, 'b'), (1, 'bb'), (2, 'bbb')]
map(): マップ型へキャスト
map(function, iterable, ...)
:function
を,結果を返しながら iterable
の全ての要素に適用するイテレータを返します.追加の iterable
引数が渡された場合は,function
はその数だけの引数を取らなければならず,全てのイテラブルから並行して撮られた要素に適用されます.
a = ["1", "2", "3"]
b = map(int, a)
b
# <map at 0x229d83185b0>
list(b)
# [1, 2, 3]
list(b)
# []
上記 2 個目の list(b)
が []
となったのは,b
がイテレータであり,1 回目の list(b)
でインデックスが最後まで送られ,要素が全て取り出されたためです.予めリストとして違う文字変数に代入しておくことで,これは回避できます.
a = ["1", "2", "3"]
b = list(map(int, a))
b
# [1, 2, 3]
b
# [1, 2, 3]
b
# [1, 2, 3]
eval(): 文字列型の式の演算結果を取得
eval(expression, globals, locals)
:
文字列とオプションの引数 globals
, locals
を取ります.オプション引数の globals
は辞書で,locals
はマッピングオブジェクトでなければなりません.
eval("1+2+3")
# 6
x = "hello"
y = "world"
eval("x + ' ' + y")
# 'hello world'
eval
を用いると,このように文字列を式のように処理することができます.
exec(): 文字列型の式を演算
exec(object, globals, locals)
:
この関数は python コードの動的な実行をサポートします.object
は文字列化コードオブジェクトでなければなりません.オプション引数の globals
は辞書で,locals
はマッピングオブジェクトでなければなりません.
exec("a=1")
a
# 1
x = "hello"
y = "world"
exec("z = x + ' ' + y")
z
# 'hello world'
open(): ファイルを開く
open(file, mode="r", buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
:
file を開き,対応するファイルオブジェクトを返します.ファイルを開くことができなければ, OSError
が送出されます.file
は path-like object (パスとして見なされるオブジェクト)で,開くファイルの (絶対または現在のワーキングディレクトリに対する相対) パス名を与えるものです.
mode はオプションの文字列で,ファイルが開かれるモードを指定します.デフォルトは 'r'
で,読み込み用にテキストモードで開くという意味です.指定可能なモードは次の表の通りです.
文字 | 意味 |
---|---|
‘r’ | 読み込み用に開く (デフォルト) |
‘w’ | 書き込み用に開き、まずファイルを切り詰める |
‘x’ | 排他的な生成に開き、ファイルが存在する場合は失敗する |
‘a’ | 書き込み用に開き、ファイルが存在する場合は末尾に追記する |
‘b’ | バイナリモード |
‘t’ | テキストモード (デフォルト) |
‘+’ | ディスクファイルを更新用に開く (読み込み/書き込み) |
公式ドキュメント (https://docs.python.org/ja/3.7/library/functions.html#open) には,網羅的な説明がなされていますが,例を見た方が良いと思うので,例を以下に示します.
まずは,ファイルを書き込み用に新規で開き,適当な値を代入していきます.
# file path
file = "test.txt"
# get file object @ mode="w"
f = open(file, mode="w")
f
# <_io.TextIOWrapper name='test.txt' mode='w' encoding='cp932'>
type(f)
# _io.TextIOWrapper
これで test.txt が書き込み専用で新規に作成され,f
をこれのファイルオブジェクトとして定義しました.変数の名称は何でも構いません.
次に write()
メソッドを用いて書き込んでみます.write()
の引数は文字列のみ有効なので,もし数値を入れたい場合は,f-string を用いるか,str()
にて文字列型にキャストしましょう.
f.write("aaaaa")
f.write(str(3.14))
f.write("あああああ")
f.write(f"{list(range(5))}")
open()
したファイルオブジェクト f
は,close()
メソッドを用いて閉じる必要があります.閉じることで,ファイルへの書き込みが完了します.
f.close()
出力結果を見るために,今度は読み込んでみましょう.mode=="r"
として読み込み専用で開き,read()
メソッドにて文字列を取得しましょう.
# open
file = "test.txt"
f = open(file, mode="r")
# read text
txt = f.read()
# file close
f.close()
# show
txt
# 'aaaaa3.14あああああ[0, 1, 2, 3, 4]'
上記のように,write()
メソッドにて指定した文字列が改行なしでテキストファイルに入力されました.
ファイルオブジェクトの open / close について,上記の書き方だと close を忘れる危険性があるので,with
ブロックというのを用いる方が一般的です.with open() as f
のように記載します.これを用いることで,with
ブロックを抜ける際に,open()
したファイルオブジェクトが自動的に close()
されます.
file = "test.txt"
with open(file, mode="w") as f:
f.write("with block test")
with open(file, mode="r") as f:
txt2 = f.read()
txt2
# 'with block test'
Python のおすすめの学習方法
プログラミングを最短で習得する,少なくても自分の意志で使えるようになる方法について,いくつかプログラミング言語を触ってきた筆者としては何の言語においても,以下2点が重要だと思います.
- 元々自分が他の言語で作っていた処理を違う言語で書き直す・・・・英語を勉強するときも,脳を生まれたばかりのまっさらな状態から勉強するわけではなく,日本語を通したり対比して,学習済みの言語野を用いて勉強するのと似ています
- 言語自体を網羅的に勉強するのではなく,やりたい事を先に考え,それを達成するために色々と調べながら実装する・・・・例えば,留学で語学力が上達するのは,その国の言葉を使ってコミュニケーションを取ることが強制されるためであり,使うことに対するモチベーションが一番大事です
独学で行うには,やはり2点目の「やりたい事ドリブン学習」が効果的で,例えば次の書籍は,Python を流行らせている AI/データ分析/機械学習/深層学習について実装することに主眼を置き説明されているので,実際に手を動かしながら学んでいける本だと思います(筆者も最初にこちらの書籍で遊びながら学びました).
コメント