タグ

Pythonに関するyoheiMのブックマーク (73)

  • [Python] 例外処理のやり方と、スタックトレース取得の実装方法 - YoheiM .NET

    こんにちは、@yoheiMuneです。 久しぶりのブログ、書きたいことがいっぱいです。プログラムでエラーが発生した時に重宝されるスタックトレース。Python言語におけるエラーハンドリングの方法と、そこでのスタックトレースの取得方法を、今日はブログに書きたいと思います。 目次 スタックトレースとは スタックトレースは、プログラムで例外が発生した際に、どのように関数が呼び出されたのか、どこでエラーが発生したのか、を特定できる情報です。不具合発生時の原因究明に、重宝されます。例えば以下のプログラムがあるとします。 def a(): """b関数を呼び出す""" b() def b(): """c関数を呼び出す""" c() def c(): """例外が発生する""" char = None char.format('hello') # ここで例外発生 # a関数から呼び出してみる a() こ

    [Python] 例外処理のやり方と、スタックトレース取得の実装方法 - YoheiM .NET
    yoheiM
    yoheiM 2019/06/03
    例外処理とスタックトレース
  • [Python] 正規表現で、改行を含む文字列をマッチさせる - YoheiM .NET

    こんにちは、@yoheiMuneです。 正規表現で文字列を扱う際に、改行が含まれる場合は少し考慮が必要です。今日はその対応方法をブログに書きたいと思います。 Pythonの正規表現について Pythonの正規表現の使い方は、「[Python] 正規表現まとめ」をご参照ください。 何がしたいのか 例えば、以下のようなHTMLがあり、そこからaタグを抜き出したいとします。 <div> <a href="https://www.yoheim.net"> ブログへのリンク </a> </div> 見ての通り、HTML全体、そしてaタグにも改行が含まれており、改行を考慮して正規表現にマッチさせる必要があります。 下記のように正規表現を書くと、改行を含む箇所が正しくヒットしません。 import re # html html = """ <div> <a href="https://www.yohei

    [Python] 正規表現で、改行を含む文字列をマッチさせる - YoheiM .NET
    yoheiM
    yoheiM 2018/12/14
    改行考慮
  • [Python] datetimeでタイムゾーンを扱う(pytz利用、UTC/JSTの変換、など) - YoheiM .NET

    こんにちは、@yoheiMuneです。 Pythonの日付でタイムゾーンを扱う機会があったので、今日はそれをブログに書きたいと思います。 目次 pytzの導入 Pythonの日付処理でタイムゾーンを扱う場合、pytzというライブラリを使うと便利です。インストールします。 $ pip install pytz タイムゾーンを指定しない場合の問題点 タイムゾーンを考慮せず日時を生成すると、実行環境(=パソコンやサーバー)のタイムゾーン設定に合わせて、日付が表示されます。 from datetime import datetime # パソコンのタイムゾーン設定が Asia/Tokyo の場合の例 print(datetime.now()) # 出力例:2018-12-06 00:59:48.677942 この場合には、パソコンのタイムゾーンが日なので日時間を表示をしていますが、出力された時

    [Python] datetimeでタイムゾーンを扱う(pytz利用、UTC/JSTの変換、など) - YoheiM .NET
    yoheiM
    yoheiM 2018/12/06
    日付のタイムゾーン
  • [Python] 3系でBasic認証付きのHTTPリクエストを発行する(urllib.request利用) - YoheiM .NET

    こんにちは、@yoheiMuneです。 Python3のurllib.requestで、Basic認証付きのリクエストを発行する機会があって実装したので、それをブログに残しておきたいと思います。 注意 PythonのHTTP通信の実装方法は、2系と3系で大きく異なりますのでご注意ください。この記事ではPython3系について記述しています。 urllib.requestを用いて、Basic認証付きのHTTPリクエストを発行する さっそく題ですが、以下のように実装します。 # HTTP通信を行うための標準ライブラリ import urllib.request # Base64を扱うための標準ライブラリ import base64 # 送信先のURL url = 'https://foo.bar.baz.yoheim.net/item/1' # Basic認証の情報 user = 'user

    [Python] 3系でBasic認証付きのHTTPリクエストを発行する(urllib.request利用) - YoheiM .NET
    yoheiM
    yoheiM 2018/10/31
    3系でBasic認証付きのhttpリクエスト
  • [Python] BeautifulSoup4で、innerHTMLとouterHTMLの取得 - YoheiM .NET

    こんにちは、@yoheiMuneです。 Pythonスクレイピングで利用するBeatifulSoup4で、innerHTMLとouterHTMLを取得する実装を行ったので、ブログにも書いておきたいと思います。 目次 前提 例えば、以下のようなHTMLがあったとします。 <h1 class="title"> <p>サイトのタイトル<img src="logo.png" alt="logo"></p> </h1> それを、以下のように読み込んで、BeautifulSoupのインスタンスを作成し、h1を取得します。 from bs4 import BeautifulSoup html = """ <h1 class="title"> <p>サイトのタイトル<img src="logo.png" alt="logo"></p> </h1> """ soup = BeautifulSoup(htm

    [Python] BeautifulSoup4で、innerHTMLとouterHTMLの取得 - YoheiM .NET
    yoheiM
    yoheiM 2018/07/18
    BeautifulSoup4でinnerHTMLとouterHTML
  • [Python] ビープ音を鳴らす(Windows/Mac対応) - YoheiM .NET

    こんにちは、@yoheiMuneです。 Pythonのお仕事でビープ音を鳴らす実装をしたので、今日はそれをブログに書きたいと思います。 ビープ音を鳴らす実装 さっそくですが、ビープ音を鳴らす実装です。ビープ音はWindowsMacでそれぞれ実現方式が違うので、platform.system()で環境別に実装します。 def beep(freq, dur=100): """ ビープ音を鳴らす. @param freq 周波数 @param dur 継続時間(ms) """ if platform.system() == "Windows": # Windowsの場合は、winsoundというPython標準ライブラリを使います. import winsound winsound.Beep(freq, dur) else: # Macの場合には、Macに標準インストールされたplayコマンド

    [Python] ビープ音を鳴らす(Windows/Mac対応) - YoheiM .NET
    yoheiM
    yoheiM 2018/03/29
    ビープ音を鳴らす
  • [Python] 辞書で、追加順を記憶するOrderedDictの使い方 - YoheiM .NET

    こんにちは、@yoheiMuneです。 Pythonの辞書(Dictionary)で、データを追加した順を保持したい場合があります。その場合にはOrderedDictを使うと便利です。今日はその使い方をブログに書きたいと思います。 目次 Dictionaryでは順番が保持されない 通常の辞書(Dictionary)では、データを追加した順が保持されません。 d = dict() d["one"] = 1 d["two"] = 2 d["three"] = 3 これをfor文で取り出すと、追加した順で取得することができません。 # for文での抽出例 for k, v in d.items(): print(k, v) # one 1 # three 3 # two 2 この場合に、追加した順で取り出したいとなると、これから説明するOrderedDictを使う必要があります。 Ordered

    [Python] 辞書で、追加順を記憶するOrderedDictの使い方 - YoheiM .NET
    yoheiM
    yoheiM 2018/02/21
    ordereddictの使い方
  • [Python] 日本語の全角と半角を変換する - YoheiM .NET

    こんにちは、@yoheiMuneです。 今日はPythonで日語の全角と半角を相互に変換する方法について、ブログを書きたいと思います。 目次 サンプルコード ここで記載したプログラムは、yoheiMune/python-playground@Githubでも公開しています。適宜ご利用ください。 利用するライブラリ いくつかライブラリはありますが、mojimojiというライブラリを使います。pipでインストール可能であること、実装がシンプルであること、が良いなと思います。 mojimojiのインストール pipでインストールすることができます。 $ pip install mojimoji 全角から半角へ 全角から半角への変換は、zen_to_han関数を利用します。 import mojimoji mojimoji.zen_to_han("アイウエオ12345ABC") # => アイウ

    [Python] 日本語の全角と半角を変換する - YoheiM .NET
    yoheiM
    yoheiM 2017/12/19
    全角と半角の変換
  • [Python] venvを用いてプロジェクトごとに独立した環境を構築する - YoheiM .NET

    こんにちは、@yoheiMuneです。 今日は、Python標準のvenvという仮想環境ツールを用いて、プロジェクトごとに独立した環境を作る方法をブログに書きたいと思います。 目次 venvとは venvは、プロジェクトごとにsite-pakcagesを独立して管理できる仮想環境ツールで、Python3.3から公式に組み込まれています。このブログで以前には「pyenvの使い方」や「pyenv-virtualenvの使い方」を紹介しましたが、今回はそれとは別の仮想環境の作り方となります。 僕は、Pythonに幾つかある仮想環境ツールを以下の基準で使い分けています。 pyenv ローカル開発で利用。頻繁にPythonのバージョンとsite-packageを同時に切り替えたいので使ってます。これでanacondaも利用。 venv Python3系の番での環境構築に利用。 virtualenv

    [Python] venvを用いてプロジェクトごとに独立した環境を構築する - YoheiM .NET
    yoheiM
    yoheiM 2017/11/27
    venvの使い方
  • [Python] プログラムの実行パフォーマンスを計測する - YoheiM .NET

    こんにちは、@yoheiMuneです。 今日はPythonプログラムにおける、処理時間の計測やメモリ使用量のチェックなど、パフォーマンスチューニングを行うための調査方法をブログに書きたいと思います。 目次 サンプルコード 今回のサンプルコードは、以下のリポジトリにありますので、必要あればご参照ください。 https://github.com/yoheiMune/python-playground/tree/master/38_performance timeコマンドを使ったお手軽計測 MacLinux限定ですが、最もお手軽な方法はtimeコマンドを使うことです。以下のように、スクリプトの実行時間を計測できます。 $ time python3 perf1.py # real 0m0.240s # user 0m0.198s # sys 0m0.032s それぞれの意味は以下の通りです。 r

    [Python] プログラムの実行パフォーマンスを計測する - YoheiM .NET
    yoheiM
    yoheiM 2017/10/12
    パフォーマンスの計測
  • [Python] 文字列で指定したモジュールを、動的にインポートを行う - YoheiM .NET

    こんにちは、@yoheiMuneです。 最近のPythonの実装で、ジョブ名をコマンドライン引数から渡し、それに該当するモジュールを動的に読み込んで処理する、という実装を行いました。その際に、文字列からモジュールを読み込む実装を行なったので、今日はそれをブログに書きたいと思います。 目次 動的インポート(Dynamic Import) Pythonで動的インポートを行うには、importlibという標準パッケージを利用します。このパッケージはimport文の挙動を定義していますが、その仕組みを使うことで、文字列から動的にモジュールを読み込むことができます。 今回は、以下のようなファイル構成とします。 # フォルダ構成 - main.py - jobs/ - apple.py - orange.py ここでは、jobs/apple.pyとjobs/orange.pyを動的に読み込んでみたいと

    [Python] 文字列で指定したモジュールを、動的にインポートを行う - YoheiM .NET
    yoheiM
    yoheiM 2017/10/10
    ダイナミックインポート
  • [Python] csvやtsvの読み書きを行う(csvモジュールの利用) - YoheiM .NET

    こんにちは、@yoheiMuneです。 今日はPythonでのCSVやTSVの扱い方をブログに書きたいと思います。 目次 csvモジュールを利用する PythonではCSVファイルやTSVファイルを扱うために、csvという標準モジュールが用意されています。名前からはcsv専用に見えますが、後述のdelimiterを指定することで、様々なフォーマットに対応できます。 簡単なCSVであれば、自前でファイルを開いて、カンマでスプリットすることで処理できますが、ダブルクォートで文字列を囲ったり、エスケープ処理したりが必要な場合には、このモジュールを使うと便利です。 以下のようにインポートして使います。 import csv それでは具体的な使い方を見てみたいと思います。 CSVへ書き出し CSVを作成するにはcsv.writerを用います。具体的には以下のような実装を行います。 # CSVの書き込

    [Python] csvやtsvの読み書きを行う(csvモジュールの利用) - YoheiM .NET
    yoheiM
    yoheiM 2017/10/06
    csvモジュールの利用
  • [Python] 独自クラスで比較演算ができるようにする - YoheiM .NET

    上記の6つを実装することで、独自クラスでも比較演算ができるようになります(正確には__eq__を実装してあれば、__ne__は実装しなくても大丈夫です)。 具体的には以下のように実装します。 class Item(object): def __init__(self, price): self.price = price def __eq__(self, other): if not isinstance(other, Item): return NotImplemented return self.price == other.price def __lt__(self, other): if not isinstance(other, Item): return NotImplemented return self.price < other.price def __ne__(self

    [Python] 独自クラスで比較演算ができるようにする - YoheiM .NET
    yoheiM
    yoheiM 2017/10/05
    比較演算子の実装
  • [Python] 独自クラスをSetやDictのキーで使えるように、ハッシュ対応する - YoheiM .NET

    yoheiM
    yoheiM 2017/10/03
    独自クラスのハッシュ化の実装
  • [Python] 少数を含む金額計算を正確に行う(decimalモジュールの利用) - YoheiM .NET

    こんにちは、@yoheiMuneです。 最近はシステムトレードのプログラムを書いていて、金額計算などで少数を正確に扱う必要があり、decimalモジュールを利用しました。今日のブログではそのDecimalの使い方をブログに残したいと思います。 目次 decimalモジュールとは decimalモジュールは、少数を含む数値を正確に表現したり計算したりすることに使えるモジュールです。 パソコンでは数値を2進数で表現しますが、2進数では0.1という表現(1の10分の1)を正確に表すことができません。 num = 1.1 print(type(num)) # <class 'float'> => float(浮動点少数で扱っている) 参考:1より小さい数を含む二進数表現 なんでもない数値を扱うときは、2進数で表現できない数値の誤差は気にしないのですが、お金とかを扱う場合には正しく扱いたいものです。

    [Python] 少数を含む金額計算を正確に行う(decimalモジュールの利用) - YoheiM .NET
    yoheiM
    yoheiM 2017/09/07
    システムトレードでの金額演算
  • blog.php?q=20170802

    こんにちは、@yoheiMuneです。 Pythonのお仕事では必ずと言っていいほどお世話になるrequestsモジュールについて、使い方をブログに書きたいと思います。 目次 requestsモジュールとは requestsモジュールは、HTTP(s)通信を行うためのライブラリで、標準であるurllibよりもかなり使い勝手良く、HTTPリクエストを発行することができます。かなり便利なので、僕はPythonの案件ではよく利用しています。 インストール インストールは、pipコマンドからインストールすることができます。 $ pip install requests requestsモジュールの基的な使い方 例えばGet通信を行う場合には、以下のように使うことができます。 # requestsモジュールの読み込み import requests # Basic認証(user/pass)でGET

    blog.php?q=20170802
    yoheiM
    yoheiM 2017/08/24
    requestsモジュールの使い方
  • [Python] dateやdatetimeをjson.dumpでエラーなく出力する - YoheiM .NET

    こんにちは、@yoheiMuneです。 Pythonのjsonモジュールを使うといい感じにjsonが扱えますが、dateやdatetimeなどのJSONに定義されていない型は、はうまく文字列に変換できません。今日はその対応Tipsをブログに書きたいと思います。 目次 json.dumpで、dateやdatetimeはエラーになる こんな感じにエラーになってしまいます。 import json from datetime import datetime # datetime型を含むdict item = { "dt" : datetime.now() } # JSON文字列にしようとするとエラー jsonstr = json.dumps(item) """ Traceback (most recent call last): File "<stdin>", line 2, in <modul

    [Python] dateやdatetimeをjson.dumpでエラーなく出力する - YoheiM .NET
    yoheiM
    yoheiM 2017/07/10
    JSONシリアライズ対象外の型をサポートする
  • [Pyahon] Yamlファイルを扱う - YoheiM .NET

    yoheiM
    yoheiM 2017/07/07
    Yamlファイルを扱う
  • [Python] マルチプロセスな処理を実装して、処理を高速化する - YoheiM .NET

    こんにちは、@yoheiMuneです。 Pythonでは、multiprocessingモジュールを利用して、簡単にマルチプロセスプログラミングを行うことができます。今回はプロセスを複数立ち上げる実装方法を、ブログに書きたいと思います。 目次 Pythonで並列処理を実装するには 多くのプログラミング言語では並列処理の実装方法として、マルチスレッドとマルチプロセスの2つが提供されています。マルチスレッドはプロセス1つでスレッドを複数にする方法で、マルチプロセスはプロセスを複数立ち上げる(ps auxなどで複数見える)方法です。 Pythonの場合、グローバルインタプリタロック(GIL)という仕組みがあり、同一プロセス上では(例えマルチスレッドだったとしても)同時に1つの処理しか並列して行われません(その恩恵として、変数のスレッドセーフが保たれる)。ただこの仕組みのため、マルチコアなPCなど

    [Python] マルチプロセスな処理を実装して、処理を高速化する - YoheiM .NET
    yoheiM
    yoheiM 2017/06/01
    マルチプロセスプログラミング入門
  • [Python] PythonからFTPを実行する - YoheiM .NET

    こんにちは、@yoheiMuneです。 今日はftplibという標準モジュールを使って、PythonからFTPを行う方法をブログに残したいと思います。 目次 FTP環境の準備(必要あれば) テスト用にFTPサーバーを作成します。ここではDockerを使いたいと思います(DockerについてはDockerに入門する(インストール、OSイメージ入手、コンテナ起動、コンテナ管理)をご参照ください)。 FTPサーバーとして、以下のDockerイメージを利用します。 https://github.com/stilliard/docker-pure-ftpd そして以下のようにセットアップを行い、FTPサーバーを構築します。 # Dockerイメージをダウンロード $ docker pull stilliard/pure-ftpd:hardened # イメージからインスタンスを起動 docker r

    yoheiM
    yoheiM 2017/04/06
    PythonからFTPを実行する