モジュール間の循環参照(circular import)のエラーについて 先週のPythonETLの作成で、以下のようなエラーが発生した。 ImportError: cannot import name 'MyClass' from partially initialized module 'module_a' (most likely due to a circular import) この記事では、このエラーを再現させて、モジュール間のやり取りについての理解を深めていきたい。 サンプルの作成 モジュール間のやり取りに関するエラーを発生させたいので、以下のサンプルファイルを作成した。 main.pyは実行ファイル。module_a.pyからMyClassを読み込んで、そのインスタンス生成を行っている。 from modul… Python トラブルシューティング
14日前のcsvファイルのみを取得するという処理 現在作成しているPythonETLで、連携元フォルダに3万件のcsvファイルが溜まっていて、その中から14日前のファイルのみを取得して、後続の処理に回すという処理を作成する必要があった。 この記事では、そのミニチュア版を作成していこう。 3万件のcsvファイルを生成する まずは、create_dummy_csv_filesという関数で、3万件のCSVファイルを作成する。 import os import datetime import random # フォルダのパス DATA_DIR = "dummy_csv_files" # ダミーの3万件の空のCSVファイルを作成 def create_dummy_csv_files(num_files=3000… CSV Python
現在の日時から20日前の日時を生成する PentahoETLのPython化において、取得元のフォルダから最終更新日時が20日前のファイルのみを抽出する必要があった。 理由は、3万くらいのファイルがあり、すべて取得してしまうと処理が重くなってしまうから。 その20日という期間を日時型で生成して、ファイル取得のインスタンス生成時にコンストラクタ引数として渡す必要があった。 「20日という期間を日時型で生成」という部分について、この記事では解説していく。 作成したPythonコード from datetime import datetime, timedelta # 現在の日時を取得 now = datetime.now() # 20日前の日時を計算 twenty_days_ago = now… Python プログラミング学習
テキストファイルから特定の文字列が入った行を抽出する 仕事でいくつかテーマがあって、そのPentahoETL処理のログから、目的のテーマのログを抽出する必要があった。 Pythonで実現予定なので、記事を書いていく。 テキストファイルの用意 ChatGPTにお願いして、1000行のなかにJapanが含まれるテキストファイルを生成してもらった。 テキストはこちら。japanが10個ランダムと指示したはずだが、64個入っていた。 row_filter/random_countries.txt at master · ki-hi-ro/row_filter ソースコードの作成 こちらもGPTを活用した。生成AIはどんどん活用していきたい。 ホリエモンがYouTubeの広告で「AIは大脳の機能拡張、アシストしてく… Python プログラミング学習
Django REST Framework(DRF)のルーティングがどのように機能しているかを深掘りし、urls.pyの仕組みを完全理解する APIの設計においてルーティングはバックエンドとフロントエンドの接続点となる。 正しく理解することで、拡張や修正がしやすくなる。 urlpatternsとは urlpatternsは、URLルーティングを定義するためのリスト。 path()やre_path()で定義されたURLパターンが含まれる。 これにより、特定のURLにアクセスしたときに、どのビューが処理するのかを指定できる。 現状のタスク管理アプリを見ていく 例えば、以下の「django_todo > myapp > urls.py」を見ていこう。(django_todo/myapp/urls.py at master · ki-hi-ro/django_todo) from django.ur… API Django Python 習慣化
Pythonで作る「FizzBuzz」 みなさんは「FizzBuzz」をご存知だろうか? 3の倍数の時は「Fizz」、5の倍数の時は「Buzz」、15の倍数の時は「FizzBuzz」と出力するやつだ。 前提として、1~100まで出力する。 今回はそんな「FizzBuzz」をPythonで作成してみたので、ソースコードの解説をしていきたい。 まずは単純出力 for文とrangeの知識を試すコードを書いた。 for i in range(0, 100): print(i) こちらを実行すると、0~99まで単純出力される。 1~100にする range関数は、終了値 - 1の数値までの連続した数値を持つ「イテラブル」なので、range(1, 101)とすることで、1~100までの数値を持つ「イテラ… FizzBuzz Python
pythonで作った「買い物リスト作成アプリ」について解説 ChatGPTの力もお借りして、コンソール上で動く「買い物リスト作成アプリ」を作成したので、見ていただきたい。 アプリの動作について ざっくりとこのアプリの動作についてお話しすると、起動して指定した場所にある買い物リストのテキストを読み込む。そして、買い物リストの内容を表示する。その後に、追加、削除、終了の3択をユーザーに選んでもらう。 追加の場合、買い物リストに商品を追加することができる。 削除の場合、買い物リストから商品を削除することができる。 終了の場合、このアプリが終了する。 全体のソースコード import os import json def load_shopping_list(filepath): if os.path.exists(f… Python 個人開発
pythonの機械学習の仕組みが少し分かった progateの月3,000円のproffesionalコースにお世話になっている。 その中に、pythonで機械学習が学べるコースがあった。 まだ最初のレッスンしか見ていないものの、自分でも色々と調べて「機械学習ってこういうことなのか!」という状態になっている。 なので、機械学習のざっくりとした仕組みについて書いていきたいと思う。 機械学習の処理の流れ 処理の流れを大まかに分けると、以下のようになる。 元のデータを用意する(入力出力のデータを含んでいる必要がある)。 ライブラリ内の関数で、入力用の学習用データと評価用データ、出力用の学習用データと評価用データの4つに分ける。 機械学習用のアルゴリズムに学習用データ(入力と出力)を学習させる。 学習され… Python アルゴリズム
CSVの新規・更新ファイルを見分けたい方へ|pandas・SQLによる判定の実践記録 取り込み履歴とファイルの最終更新日時を比べ、新規・更新ファイルを判定する考え方を、サンプルと期待結果で解説します。 pandas Python SQL データベース
Pythonとポケモンとオブジェクト指向 誰でもエンジニアさんの動画でオブジェクト指向について分かりやすく解説していたものがあった。 https://youtu.be/7_hNvwSYEmo?si=nAKqn39Q_pBkSIhF 使用している言語はPythonで、プログラム内容はポケモンの対戦シーン。 オブジェクト指向のポイント 呼び出し元の処理を楽にするというのがポイント。 今回の例で言うと、ポケモンの内容はポケモンクラスにまとめて書くことで、呼び出し元ではポケモンクラスのインスタンスを生成して、使いたいメソッドを呼び出したりするだけで済む。 コンストラクタでインスタンス生成時に初期情報をセットする ポケモンクラスのコンストラクタでポケモンの名前や攻撃力などの情報をセットできる。 上記の5… Python オブジェクト指向