Pythonでプログラミングするために学んだ内容を書き留めています。
エントリーポイント
Pythonはプログラムの開始位置となるエントリーポイントは無く、スクリプトに記述した順番に実行されます。
def func():
print('hello world!')
if __name__ == '__main__':
func()
if __name__ == '__main__':
の__name__
には実行しているモジュール名が自動的にセットされており、'__main__'
と比較することでスクリプトがモジュールで読み込まれているのでは無く単体で実行していることを判定しています。意図的に実行される部分をif文の中に限定することでエントリーポイントような役割にしています。
配列(list)の初期化
# listオブジェクトの生成で初期化
my_list1 = list()
print(my_list1) # 結果 []
# []で初期化
my_list2 = [0, 1, 2]
print(my_list2) # 結果 [0, 1, 2]
連想配列(dict)の初期化
a = {"aaa": 0, "ccc": 1, "ddd": 2}
テキストファイルを1行ごと読み込み
with open("sample.txt", "r") as f:
for line in f:
print(line.strip())
with
を使うことでopen
したファイルf
を閉じるコードを省略出来ます。
for
でf
からレコード1行分をline
に取り出します。
line
には末尾に改行コードを含んでおりprint()
も改行されて、改行が重複しますので、line.strip()
で改行コードを取り除いています。
テキストファイルに1行ごと書き込み
data = ["apple", "banana", "orange", "grape"]
with open("output.txt", "w") as f:
for item in data:
f.write(item + "\n")
クラス
class SuperClass:
def __init__(self, name):
self._name = name
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
def sample_method(self):
print("SuperClass.sample_method()")
class SubClass(SuperClass): # SuperClassクラスを継承
def __init__(self, name):
super().__init__(name) # 親クラスのコンストラクタを呼び出す
def sample_method(self): # メソッドのオーバーライド
print("SubClass.sample_method()")
# インスタンスの生成
obj = SubClass("AAA")
# プロパティ
obj.name = "BBB"
print(obj.name) # 出力 BBB
# メソッド
obj.sample_method() # 出力 SubClass.sample_method()
コンストラクタ
def init(self, name):
メソッドの引数にself
正規表現で条件式
import re
pattern = r"img(\d+)\.png"
text = r"aimg001.png"
# search 文字列にパターンが含まれているか
if re.search(pattern, text):
print("ok") # 出力 ok
else:
print("ng")
# match 文字列の先頭からパターンに一致するか
if re.match(pattern, text):
print("ok")
else:
print("ng") # 出力 ng
正規表現で文字を抽出
import re
text = "私の電話番号は090-1234-5678です。"
pattern = r"(\d{3})-(\d{4})-(\d{4})" # 電話番号のパターン
match = re.search(pattern, text)
if match:
print(match.group(0)) # 一致した文字列全体を抽出
# 出力: 090-1234-5678
print(match.group(1))
# 出力: 090
print(match.group(2))
# 出力: 1234
print(match.group(3))
# 出力: 5678
else:
print("電話番号は見つかりませんでした。")
JSON
import json
data = [
{"name": "田中", "city": "東京"},
{"name": "若本", "city": "大阪"}
]
json_text = json.dumps(data, ensure_ascii=False)
print(json_text)
# 出力
# [{"name": "田中", "city": "東京"}, {"name": "若本", "city": "大阪"}]
data2 = json.loads(json_text)
print(data2[1]['city'])
# 出力
# 大阪
json.dumps()でobject⇒json(string)、json.loads()でjson⇒object
ディレクトリを作成
ディレクトリが存在しない場合複数階層を一度に作成。
import os
os.makedirs("./path/dirname", exist_ok=True)
ファイルの一覧を取得
import glob
for filename in glob.glob("./path/dirname/*.*"):
print(filename)
パス文字列からファイル名を取得
import os
os.path.basename("./path/dirname/filename.txt")
パス文字列からディレクトリ名を取得
import os
dir_str = os.path.dirname("./path/dirname/filename.txt")
ファイル名からベース名と拡張子を取得
import os
array = os.path.splitext("filename.txt")
戻り値は配列が返る。最初の要素がベース名、次の要素が拡張子がセットされている。
ディレクトリとファイル名を結合しパス文字列を生成
import os
new_path = os.path.join("./path/dirname", "filename.txt"))
単純な文字列の結合と異なり、OSごとのディレクトリ記号の違いなどに対応する。
他のスクリプトファイルの関数の呼び出し
import my_module
my_module.func()
スクリプトファイルが同一ディレクトリに保存されていることが前提。
特定の関数のみインポート
from my_module import func, sub_action
func()
呼び出し時のモジュール名を省略できる
パスの有無を確認
import os;
os.path.exists("./path/dirname/filename.txt")
ファイルの有無
os.path.isfile()
ディレクトリの有無
os.path.isdir()
コマンドライン引数
import sys
# コマンドライン引数を表示
print(sys.argv)
# コマンドライン引数の数を表示
print(len(sys.argv))
# 特定のコマンドライン引数を取得
if len(sys.argv) > 1:
print(sys.argv[1])
コメント
'''
これは複数行のコメントです。
複数行にわたって自由に記述できます。
'''
# 単行のコメント
コメント