ほんじゃら堂

めんどくさい仕事をラクにする作業自動化レシピ集

python

プログラムテスト用の組み合わせパターンデータをササッと作るためのテンプレ【Python/Clojure】

他の誰かが作成した検索プログラムやストアドファンクションを 修正させられる時に、 検索対象のテストデータとか プログラムに渡す検索パラメータのテスト用データを 必要なパターン分作成してテストするのだけど、 抜け漏れのないテストデータを簡単に生成…

はてなカウンターのログを分析できるようにデータベースに取り込むスクリプト【Python/Clojure】

はてなカウンターの「ログ」画面で ログを月単位でダウンロードできることを発見したので、 ダウンロードしたログを分析用にデータベースに保存するスクリプトを作成する。

Pythonのジェネレータを使って大容量ファイルを分割する

過去に下記のような、ファイルを複数に分割する方法について記事を書いた: blog.honjala.net この記事に書いたコードをもう少しエレガントに書けないものか、 と方法を調べていて、 Pythonのジェネレータが使えそうだったので色々試してみた。

PythonでSSHトンネリングしてデータベースアクセス

稼働中のWebアプリのデータベースに定期的にアクセスして データの状態をチェックしたい、でもデータベースには 外部から直アクセスできないようになっているので、 SSHトンネル経由でないとアクセスできない、という場合。 A5:SQLなりpgAdminなり最近のDBア…

Pythonでgrep風にディレクトリ内のファイルを検索する方法(Python3対応&機能追加版)

だいぶ前に書いた下記の記事 blog.honjala.net の内容がPython3で動かないようなので、 Python3対応しつつ、もう少し使えるように書きなおしてみる。

SQL Serverから出力したrptファイルを使いやすいようにcsvファイルに変換する【Python】

SQL Serverからエクスポートしたrpt形式ファイルを渡され、 CSVに変換してくれと依頼される。 「あれ、SQL Server Management Studioに 直接CSV出力する機能ありませんでしたっけ?」 と確認しても「しらん。やれ。」と言われる。 そんなよくある状況で助け…

ボケてきたのかタイムカードの打刻を忘れてしまうので、打刻漏れ防止用チェックプログラムを作成した

毎朝出社時に社員カードで入室し、 入室したのと同じカードで出勤打刻をするのだが、 入って数歩のところにタイムレコーダーが置いてあるにも関わらず、 打刻が漏れることがある。 どうやら、 雨の日に途中で傘を置いたり(傘立てはドアとタイムレコーダーの…

PostgreSQLにサクッとテストデータを登録するPythonテンプレ

Python手軽でいいね、ってことで 最近はJavascriptよりもPythonでスクリプトを書いている。 今日もパフォーマンステスト用に大量データを登録する必要があったので SQLAlchemyを使ってスクリプトを書いてみた。 Python3で動作確認済み。

iPythonでコマンド履歴ログ出力を自動化する

たまにはPythonを使っておこう、 ということでここ数日シェル環境としてiPythonを使っている。 Jupyter and the future of IPython — IPython ほぼPython言語としての機能は使っていないのだけど、 ちょっとした計算をしたりするにはなかなか便利だ。 せっか…

Pythonでオブジェクトから階層ごとに属性があるかチェックせずに値を取得するための関数

AmazonのAPIを触っていて、レスポンスとして返ってきた(XMLから生成された)オブジェクトから値を取得する際にいちいちhasattrでチェックするのが面倒だったので、そのパスがなければデフォルト値を返す関数を作った。 見つけられなかったけど、標準ライブ…

PythonでExcelの表からINSERT用SQLを生成して初期データ作成を楽にする

職場はメイン言語がJavaなので、プロジェクトでPythonを使う機会は ないのですが、キャプチャを撮ったりExcelを操作したりする作業を 「こっそり自動化」するスクリプトをPythonで書いたりしています。 最近はSE作業で何かとExcelを使うことが多いので、 Exc…

Python+ScrapyでWeb上のリストからデータを抽出する

昨日の続きでScrapyをさわる。 ちなみに、昨日Linux環境にインストールする時は苦労したが、 今日Windows環境にpipでScrapyをインストールしてみたら、 何ひとつひっかからずにインストールが完了した。 ともあれ、ようやくScrapyをインストールできたので、…

CentOSのPython2.7環境にScrapyをインストールするまで

ひとつPythonでWebスクレイピングでもやってみようかとScrapyをVPS環境に入れてみたところ、インストールするだけで手間取ってしまった。 環境はPython2.7.3で、インストールしてから特に何も設定していない状態。 本サイトに書いてある通り、まずは pip ins…

PythonとPandasで作業履歴から案件別作業別のピボットテーブルを作成する

作業履歴が入ったデータベーステーブルから、 案件情報を行に、作業内容(「設計」とか「PG」とか)を列に、 案件別作業内容別合計時間を値として持つピボットテーブルを作成して Excelで確認する必要があったので、以前から興味のあったPandasを 使ってスク…

指定したフォルダ内のファイルのファイル名から特定のパターンの文字列を一括削除する

フォルダを指定してその中のファイルのファイル名の一部を削除するちょっとしたスクリプト。子フォルダの再帰処理はしない。 001_(hoge).txt、002_(fuga).txtなどのファイルを001_hoge.txt、002_fuga.txtに一括変換したい時なんかに使えるよう、正規表現でパ…

Pocketからエクスポートしたブックマークをデータベースに取込むスクリプト

自分のブックマークを色々分析できるように、PocketのOptionsページから エクスポートしたブックマークのリストをデータベースに取込む。 PythonでMySQLdbとBeautifulSoup4を使用。 テーブル CREATE TABLE bookmarks ( id integer NOT NULL AUTO_INCREMENT, …

Apacheのログからアクセス数上位20件のIPアドレスを表示する

こちらを参考にしました http://www.freia.jp/taka/blog/356 import re f = open("error_log") pattern = re.compile(r"\[client (?P<ip>[0-9\.]+)\]") ips = {} for line in f: m = pattern.search(line) if m: ip = m.group("ip") ips[ip] = ips.get(ip, 0) + </ip>…

Foursquare API のOAuth認証用クラス

FoursquareのAPIを使って場所系のサービスでも作ってやろう、 と思い立って作っている。 APIドキュメントのRate Limitingを読んだところ、 認証済みの場合は認証ユーザー毎、認証していない場合はIPアドレス毎に 1メソッドにつき1時間200アクセスまでと制限…

re.finditerで正規表現マッチしたパターン毎にグループ化

分かりにくいタイトルだけど。 1つのファイル内に同じパターンにマッチする箇所が複数ある場合に、 個々の箇所でデータを名前つきグループ化して抽出したい場合に使える。 例えば、HTMLファイルの中からテーブルの各行から個々の列の値を取り出す時とか。 パ…

関数の呼び出しログを取る

デコレータ便利。この例では呼び出しと引数だけをログしてるけど、 処理にかかった時間の計測とか、色々できそう。 log.py import logging def log_api_call(func): def decorator(*args, **kwargs): logging.info("API: %s called. params: %s %s" % (func.…

lxmlでHTMLページタイトル取得

一応動くサンプル。あんまりテストしてないので、取得できないパターンはあるかも。 覚えておきたいのはxpathの設定方法で、 どうやら //head/title/text() と書くとたまにうまくタイトルが取得できない場合があるようで、 そんな場合でも //title/text() と…

正規表現で引用符を検索する

TumblrのRSS解析を試みていて、そこでQuote登録した文字列を検索して変換しようとしたところ、苦労したのでメモ。 RSSのソースを見たところ、引用した部分は二重引用符で囲まれているようだったので、普通にダブルクオートで検索してみたけどうまくヒットし…

tinyurlやbitlyのURLから元のURLを取得する

各サービスのAPIでも取得できるようだけど、一応こんな方法でもできた、ということで。 import urllib2 def get_real_url(url): r = None try: r = urllib2.urlopen(url) except: pass if r: url = r.geturl() return url long_url = get_real_url("短縮URL"…

python-bitlyとpython-twitterを使ってTwitterにポストする

Honjalaに新規登録されたブックマークをTwitterに自動投稿するスクリプトを書いた。 ブログやブックマークをTwitterに自動投稿する機会は今後もありそうなのでメモ。 準備 Twitterとbitlyにアカウントをあらかじめ作成しておく。 PythonからTwitter APIを利…

三項演算子の使い方

毎回忘れて探し回るので、ここに書いておく value = then_value if predicate else else_value こちらより http://www.shido.info/py/python10.html

指定ディレクトリの内容を再帰的に削除

また使いそうなので記録。指定ディレクトリ内の.svnやらCVSやらを一括削除するためのスクリプト。 バグがあるかもしれないので、削除処理をコメントにして削除対象を確認できるようにしておく。 recursive_delete.py # -*- coding: utf-8 -*- import os impo…

lxmlで日本語のWebページのタイトルを取得する

日本語が化けて大変苦労したのでメモ。 結論として、XML(またはHTML)を解析する前にunicode関数に通しておく、 ということで良いのかな? 相変わらず文字コード関連はよく分からない。 from urllib import urlopen from lxml import etree html = urlopen(…

置換処理の置換後の文字列の代わりに関数を指定する

今後も使えそうなのでメモ。 import re from django.core.exceptions import ObjectDoesNotExist from sample.web.models import WebPage PATTERN = r'<a href="%(dummy_url)s" >%(real_url)s</a>' HTML_TEMPLATE = re.compile(r"((http|https)://[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)"…

Pythonでコマンドプロンプトを拡張

WindowsのコマンドプロンプトをPythonで拡張するwxPythonアプリケーションを作った。 Linuxシェルでも動くかもしれないが、試していない。 pythonスクリプトと、シェルコマンドが使える。コマンドを入力すると、 最初に指定ディレクトリ内のpythonスクリプト…

Pythonで大容量ファイルを指定行数で複数ファイルに分割する

これもちょっと必要だったので作成したスクリプト。 秀丸やgVimで開けないほど大きいファイルを分割する。 split_file.py # -*- coding: utf-8 -*- in_file_name = "verybigfile.log" out_file_name_template = "splitted_%d.log" max_lines = 1000000 split…