Python

逆FizzBuzz問題(linq)

asq を入れて、ちょっと書きなおしてみた. order_by した後に、count して first すると empty sequence が出るという C# で出ない挙動がちょっとアレです. from asq.initiators import query from itertools import count, cycle, islice, ifilter def Fizz…

逆FizzBuzz問題

最近ぞっぷりと linq に染まっていたので、関数の入れ子をより気持ち悪く感じて困る. python にも組み込み linq を誰か. from itertools import count, cycle, islice, ifilter def FizzBuzz(): seq = [None, None, "Fizz", None, "Buzz", "Fizz", None, Non…

CRC32

RFC 1952 - GZIP file format specification version 4.3 に載っているコードをベタ移植しただけです. crc_table = [None] * 256 def make_crc_table(): for n in range(256): c = n for k in range(8): if c & 1: c = 0xedb88320 ^ (c >> 1) else: c >>= 1 …

Unix time

Unix time いろいろ.まずは C#. var timestamp = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds.ToString("F0"); Python. timestamp = '%d' % time.mktime(time.localtime()) シェルスクリプト. TIMESTAMP=`date +%s`

Twitter の JSON をテキストに変換

検索結果の json をテキストに変換した. きっとまた使うので残しておく. import json from glob import glob from datetime import datetime, timedelta txtconv_table = { '&lt;': '<', '&gt;': '>', '&quot;': '"', '\r': '', '\n': ' ' } def dtconv(s): …

無理やり with 対応

追記: contextlib.closing を使えばよかったのこと(^^; GzipFile が標準ライブラリのくせに with に対応していなくてカッとなってやった. つか、close メソッド呼べばいいだけのクラスって多いと思うんだけど・・・. import gzip from new import instanceme…

Python で png 画像を自力で生成する(パレット編)

特に何かが難しかったりするわけでもないですが. from sys import stdout from struct import pack from zlib import crc32, compress def chunk(type, data): return pack('!I4s%dsi' % len(data), len(data), type, data, crc32(type + data)) width, heig…

Python で png 画像を自力で生成する

Ruby で png 画像を自力で生成する - まめめも を Python に移植しただけw # -*- coding: utf-8 -*- from sys import stdout from struct import pack from zlib import crc32, compress width, height = 100, 20 depth, color_type = 8, 2 # グラデーション…

ffftp.ini パスワードデコーダ

諸事情で書いたので. 入力は標準入力、出力は標準出力. #!/usr/bin/env python # -*- coding: utf-8 -*- from sys import stdin, stdout def decode(s): result = '' t = [ord(c) for c in s] + [0] i = 0 while i < len(s): rnd = (t[i] >> 4) & 0x3 ch = (…

2点間の距離を計算する

ヒュベニの距離計算式を Python のコードに落としてみた. import math a2 = 6378137.0 ** 2 b2 = 6356752.314140 ** 2 e2 = (a2 - b2) / a2 def distance_by_hubeny(p1, p2): def d2r(deg): return deg * (2 * math.pi) / 360 (lon1, lat1, lon2, lat2) = ma…

テキストを RTF に変換する

色付けや装飾をしないと余り意味が無いわけですが(^^; 入力は UTF-8 なテキストを stdin から、出力 stdout となっています. #!/usr/bin/env python # -*- coding: utf-8 -*- from sys import stdin, stdout write = stdout.write font_name = u'MS Pゴシ…

アッカーマン関数

一応残しておく. $ python Python 2.6.2 (r262:71600, Jun 5 2009, 23:21:35) [GCC 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)] on cygwin Type "help", "copyright", "credits" or "license" for more information. >>> cache = {} >>> >>> def m…

RDP via SOCKS

SOCKS 経由で RDP 接続するためのローカル TCP relay. 色々と思うところはあるけど、とりあえず動く. 作り込みとかはまた考える. from socket import socket, inet_aton, AF_INET, SOCK_STREAM from struct import pack from threading import Thread relay_…

RGB to L*a*b*

Delphi に移植しないと・・・. def xyz2rgb(xyz): def from_linear(v): def clamp(v): if v < 0.0: return 0.0 elif v > 1.0: return 1.0 else: return v if v <= 0.0031308: return int(clamp(v * 12.92) * 255.0 + 0.5) else: return int(clamp(1.055 * v …

PDF を暗号化する

Jython で PDF を暗号化するスクリプト. Jython 2.5.0 + iText 2.1.5 + Bouncy Castle 1.43 で動作確認. Jython 2.5.0 リリース記念(嘘). Office 2007 SP2 リリース記念(本当). from sys import argv from java.io import FileOutputStream from com.lowagie…

gzip_decode

なんとなく書いてしまったので. def gzip_decode(data): from zlib import decompress, MAX_WBITS def skip_string(data, i): while data[i] != '\0': i += 1 return i + 1 flag = ord(data[3]) i = 10 if flag & 0x04: i += 2 + ord(data[i]) + 256 * ord(d…

prettifyjson.py

json.dump が ASCII 範囲外を勝手にエスケープするのはどうかと思います. 入力 stdin, 出力 stdout、文字エンコーディングは入出力ともに UTF-8 を想定. #!/usr/bin/env python from json import load, dumps from sys import stdin, stdout stdout.write(du…

パスワードをハッシュ化して DB に格納する

Django 始めて2日目です. 以下のソースで掲題の件が動いていますが、書き方が正しいか分からないので晒しておきます. コメントを求む. from django import forms from django.contrib import admin from models import User from hashlib import sha1 class …

Python で cat | grep | wc -l を真似てみるテスト

cat クラスをコンベンションに従って書き換えていかないと機能強化できないのがいけてない. from __future__ import with_statement from re import compile class cat(object): def __init__(self, filename): def _cat(filename): with open(filename) as …

PDF にページ番号を書き込む

Jython で PDF にページ番号を書き込むスクリプト. Jython 2.2.1 + iText 2.1.4 で動作確認. from sys import argv from java.io import FileOutputStream from com.lowagie.text.pdf import BaseFont, PdfReader, PdfStamper, PdfContentByte def write_nom…

self_path

実行したスクリプトそれ自身の絶対パスを返す関数. from sys import argv from os.path import dirname, abspath def self_path(): return abspath(dirname(argv[0]))

pexpect

pexpect.py だけ持ち込めば使える pexpect はとても便利. python でごりごりコードが書ける分だけ expect よりも便利! デプロイ、ログ収集と大活躍. 以下、ssh でログインして uname -r の結果だけを拾ってくる例. from sys import stdout, stderr from getp…

メールヘッダフィールドの折り返し

To フィールドが長くなったので作ってみた. def create_field(name, values): LINE_LIMIT = 78 result = '' s = name + ': ' + values[0] for v in values[1:]: if len(s) + len(v) + 2 > LINE_LIMIT: result += s + ',\n' s = '\t' else: s += ', ' s += v …

pulldom の外部エンティティ参照の無効化

pulldom で cobertura の吐く xml を処理していたら urllib2.URLError: というエラーが. 何でかと思ったら の部分で DTD の URL を読みに行っているのが原因のよう. マニュアルを読んでも、対策が分からなかったのでライブラリのソースを読んで直感で p = p…

SOCKSv5 の接続コード

認証不要のSOCKSv5サーバにTCPで繋ぐだけwww 接続先もIPじゃないと駄目www 将来に向けた布石のつもりではある. from sys import exit, stdout, stderr from socket import socket, AF_INET, SOCK_STREAM s = socket(AF_INET, SOCK_STREAM) try: s.connect(('…

NTP から現在時刻を取得する関数

何で書いたのか記憶に無いのだが、発掘されたので. def ntp_now(server, port = 123): from socket import socket, AF_INET, SOCK_DGRAM from struct import unpack from datetime import datetime s = socket(AF_INET, SOCK_DGRAM) try: s.sendto('\x1b' + …

Atom 内の ID によるダイジェスト

rss_sum が要るなら atom_sum も当然要るよねと. def atom_sum(s): from xml.dom import pulldom from hashlib import md5 acc = [] p = pulldom.parseString(xml_encoding_hack(s)) for (e, n) in p: if (e == pulldom.START_ELEMENT) and (n.tagName == 'e…

XML のエンコーディングを UTF-8 にする関数

pulldom が EUC-JP 他に対応していなかったので作った手抜き関数. def xml_encoding_hack(xml): s = xml.splitlines()[0] if s.find('

RSS 内のパーマリンクによるダイジェスト

コメントが付くだけで RSS の最終更新日時が変動するのはどうかと思います. 記事単位での変動で更新を検出するために、ダイジェスト関数を作りました. def rss_sum(s): from xml.dom import pulldom from hashlib import md5 acc = [] p = pulldom.parseStri…

MODE1/2352 を MODE1/2048 に変換するスクリプト

RAW ISO イメージを通常の ISO イメージに変換したくなったので. from __future__ import with_statement from contextlib import nested from sys import argv, exit, stderr if len(argv) < 3: stderr.write("%s infile outfile\n" % argv[0]) exit(1) wit…