wiki:Pythonの短いソースコード集

Version 91 (modified by nakiki, 13 years ago) (diff)

--

Python:コードフラグメント

  • テキストをコピーして、適当なファイル名を作ります。
  • python test.pyのように実行してみてください。
  • 研究課題も記述しておきました。お試しあれ。

ちょっと長すぎるので、複数ページに分離しましょうよ。--sgk

  • ただいま分類中・・ --nakiki

一時的な関数定義

seq1 = ['a', 'b', 'c']
seq2 = ['1', '2', '3']
print map(lambda x,y: x+y, seq1, seq2)
  • defで関数を定義しなくても簡単なものなら埋め込める。

区切りで文字分割

import string

s = '192.168.1.1'
a = string.split(s, '.')
print a

時刻の表示

import time

print time.strftime("%Y%m%d%H%M%S ", time.localtime())

商と余り

(a, r) = divmod(13, 5)
print a
print r

ランダム

import random

v = []
v +=  [random.randint(0, 99)]
v +=  [random.randint(0, 99)]
v +=  [random.randint(0, 99)]
v +=  [random.randint(0, 99)]
v +=  [random.randint(0, 99)]
print v
  • randintは二つめの引数の値を含む範囲の乱数を作ります。Pythonっぽくない。最近はrandrangeってのがあって、こっちを使う方がわかりやすいですよ。--sgk

メッセージダイジェスト

import sha

md = sha.new()
str = 'test messsage' * 100
md.update(str)
n = md.digest()
print (n,)
  • ビット数が長いshaの160bitを使ったほうが安全です。

基底クラスの呼び出し

class ServerProxy(xmlrpclib.ServerProxy):
  def __init__(self, addr):
    t = MyTCPTransport()
    xmlrpclib.ServerProxy.__init__(self, addr, t)
  • Pythonでは基底クラスのコンストラクタは自動的には呼び出されない。呼び出すのを忘れないように。

キュー

import Queue

q = Queue.Queue()

for n in range(5):
  q.put('message '+ str(n))

while not q.empty():
  print q.get()
  • スレッド動作も考慮しているので便利かな。

コマンド引数

import optparse

parser = optparse.OptionParser()
parser.add_option("-u",  "--user", dest="user", help= 'user name')
(options, args) = parser.parse_args()

if options.user:
  print options.user
else:
  print parser.print_help()
  • 自分で作らなくても便利なので最近利用しています。

gzipファイルの展開

import tarfile

tf = tarfile.TarFile.gzopen('test.dat.tar.gz', mode = 'r')
print tf.getmembers()
for l in tf.getmembers():
  tf.extract(l)

簡単なデータベース

import dbm

db = dbm.open('test', 'rw')

if not db.has_key('key1'):
  db['key1'] = 'record1'
  print 'add record1'
else:
  print db['key1']
  • 複数プロセスでアクセスする場合はロックがいるのだろうか?

簡単なデータベース

import shelve

db = shelve.open('test.db')

if not db.has_key('key1'):
  db['key1'] = ('v1','v2','v3')
  print 'add new record'
else:
  print 'exists key1 record ', db['key1']
  • shelveを使うとpythonのタプル、リスト、辞書が格納できるのでとても便利。

CSVファイルの読み込み

import _csv

s = _csv.reader(file('test.txt', 'r'))
for ss in s:
  print ss
  • トークン解析をしなくて済む道具あることはすばらしい。
  • _csvにしないと動かないのはなぜ?