howto/python

コメント


正規表現を使ったファイル一覧の取得

>>> import glob
>>> print glob.glob('/dev/sd?')
['/dev/sda', '/dev/sdb']

その他、個々に置換するとき
>>> import re
>>> [ s.replace('/dev/','') for s in glob.glob('/dev/sd?') ]
['sda', 'sdb']

ドキュメント

Python標準ドキュメント http://www.python.jp/ (ここの、メニューのドキュメントに和訳ドキュメントがある。全モジュール索引もあり)

PyPI http://pypipython.org/pypi

インストールされている標準ライブラリはたいてい /usr/lib/pythonXX/内にある。

オブジェクトのメンバを調べる

>>> dir( hoge )

オブジェクトのドキュメントを調べる(ドキュメンテーションが書かれていれば)

>>> help( hoge )

tkinerモジュール

お気楽 Python/Tkinter 入門 http://www.geocities.jp/m_hiroi/light/pytk01.html

1. Hello world! http://www.shido.info/py/tkinter1.html

モジュールの再読み込み

Python3.3まではimp.reload()
Python3.4以降はimportlib.reload()
https://docs.python.org/3/library/imp.html#imp.reload

>>> import imp
>>> imp.reload( module )  #なお、import moduleが以前になされていること。

なお、マニュアルをみると、完全に挙動が同じなるというわけでななさそうである。

実行時間を測る

>>> import time
>>> time1 = time.clock()
>>> time2 = time.clock()
>>> print( time2 - time1 )
0.0009600000000000164
>>>
>>> help( time ) #ドキュメントをみる
>>> time1 = time.clock(); time.sleep(10); time2 = time.clock(); print( time2 - time1 )
4.599999999999049e-05

二次元配列を作る

>>> a = [ [ str(i)+str(j) for j in range(8)]  for i in range(5) ]
>>> a
[['00', '01', '02', '03', '04', '05', '06', '07'], ['10', '11', '12', '13', '14', '15', '16', '17'], 
['20', '21', '22', '23', '24', '25', '26', '27'], ['30', '31', '32', '33', '34', '35', '36', '37'], 
['40', '41', '42', '43', '44', '45', '46', '47']]
>>> a[4][5]
'45'
>>> int(a[4][5])
45
>>> for i in range(5):
...   a[i]
...
['00', '01', '02', '03', '04', '05', '06', '07']
['10', '11', '12', '13', '14', '15', '16', '17']
['20', '21', '22', '23', '24', '25', '26', '27']
['30', '31', '32', '33', '34', '35', '36', '37']
['40', '41', '42', '43', '44', '45', '46', '47']
>>> for i in range(5):
...   type(i)
...
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
>>>

いくつかの例

インタプリタ起動

$ python  #たいていpython2が起動するらしい
$ DISPLAY=hostname:0 python3 -B  #python3を起動、バイトコンパイルさせない(-Bオプション)、DISPLAYを指定。

スクリプトの実行

$ DISPLAY=hoge:0 python3 -B filename.py  #filename.pyを実行する。
$ DISPLAY=hoge:0 ./filename.py           #filename.pyを実行する。

インタプリタを利用したいくつかの例

>>> from turtle import *
>>> for i in range(6):    #図形が表示される
...     forward(100)
...     right(60)
... 
>>> a = "Python3 is awsome!"
>>> a . lower()
'python3 is awsome!'
>>> len(a)
18
>>> (1+2J)/5J
(0.4-0.2j)
>>> for item in [ 'a', 'b', 'c' ]:
...     print( item )
... 
a
b
c
>>> for c, item in enumerate( [ 'a', 'b', 'c' ] ):
...     print( c, item )
... 
0 a
1 b
2 c
>>> f=open("temp.txt", "w")
>>> for c in range(1,101):    #1から100までの数字をファイルに書き出す。
...     f.write( str(c) )
... 
>>> f.close()
>>> [ord(s) for s in "Python"]    #内包記法で文字コードのリストを作る
[80, 121, 116, 104, 111, 110]
>>> val=10; [ x for x in range(1,val+1) if val %x == 0 ]    #内包記法で10の約数のリストを作る
[1, 2, 5, 10]
>>> i = { "GMT" : "+000", "BST" : "+100", "EET" : "+200", "JST" : "+900" }
>>> i
{'BST': '+100', 'EET': '+200', 'JST': '+900', 'GMT': '+000'}
>>> i.items()
dict_items([('BST', '+100'), ('EET', '+200'), ('JST', '+900'), ('GMT', '+000')])
### dict_items(  ) が付く意味はなに? 特殊メソッド__repr__の単なる仕様?
>>> import os
>>> os.walk("./")
>>> i=os.walk("./")
>>> next(i)
('./', ['QCLObot', 'ProteinDF_bridge', 'ProteinDF', 'ProteinDF_pytools', 'OpenFOAM', 'LOG_kiku'], 
['2dn2.pdb', '1omb-mod.pdb', 'LOG_kiku.tar', 'p3.py~', 'p3.py', 'temp.txt', 'fws.gro.pdb'])
>>> next(i)
('./QCLObot', ['.git', 'qclobot', 'scripts'], ['.gitignore', 'LICENSE', 'setup.py', 'README.md'])
### 現在作業中のディレクトリ、作業中ディレクトリ内のディレクトリのリスト、作業中ディレクトリ内のファイル
### のタプルがイテレータ(next(i))で次々と得られる。
>>> from decimal import Decimal
>>> Decimal( '0.1' ) * 3
Decimal('0.3')
### 自動型変換のルールは? この*はDecimalクラスのメソッド __mul__が使われている。
>>> import sys
>>> sys.getfilesystemencoding()
'utf-8'
>>> sys.float_info
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308,
 min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)

スクリプトの例

--------------------------------------------------
#!/usr/bin/env python3                                                                                                     

#-*- coding:utf-8; -*-                                                                                            

import sys

def spamfactory( times ):
    """ スパム工場                                                                                                         

        
    """
    return "Spam ! " * times

print( spamfactory( 3 ) )

input()
--------------------------------------------------
$ ./p3.py

--------------------------------------------------
#!/usr/bin/env python3                                                                                            
#-*- coding:utf-8; -*-                                                                                            

import os

#p= "./LOG_kiku"                                                                                                  
p= "./"

for path, dirs, files in os.walk( p ):
    for f in files:
        print( path, ":", f )
--------------------------------------------------
$ ./p4.py

14章の例。みんなのPython 第3版, 柴田亨, SBクリエイティブ (2012) から
ファイルはここちら todoapp.tar

組み込みのデータ型

整数  
浮動小数点  
複素数  
文字列  
リスト  [ 1, 2, 3 ]
タプル  ( 1, 2, 3 )
ディクショナリ { k1:v1, k2:v2, k3:v3 }
bytes型  
bool型  
set型  { 1, 2, 3 }
iter  イテレート可能なインスタンスに変換する

備考:
順番があるものが、シーケンス型。
書き換えが可能なものが、書き換え可能。(ディクショナリのキーなどに使える)
書き換え可能でない型は、文字列、タプルと、数値もらしい。メソッドの引数にするとメソッドで値を
書き換えても、呼び出し側では値は変更されない。書き換え可能な型は変更される(参照渡しに相当)。

型変換

int()  文字列を数値に変換
float() 
str()  
chr()  数値を文字(列)に変換
hext  数値を16進数に変換
bin  数値を2進数に変換
oct  数値を8進数に変換

スライス

リストのインスタンスaについて、a[2:3]などとして要素を取り出すこと。

lambda式

 see Python文法詳細、p197、オライリー

i // 2

 整数除算。iが整数、浮動点小数でも切り捨て。

文字列操作

raw文字列  r"C:\path\to\file"
split
join

アンパック代入

 a, b = c, d
 return  a, b
 a, b = foo(hoge)

可変引数

 *val  タプル
 **val  ディクショナリ

ゲッターとセッター(プロパティ)

 x = property( getx, setx )  # xはアトリビュート、getx, setxはゲッターとセッターのメソッド。としておくと、
                               # インスタンス.xで代入や参照ができる。

モジュールの検索順

1)カレントディレクトリ
2)環境変数PYTHONPATH
3)標準ライブラリ
4)site-packages

オブジェクトの型を知る

type(hoge)

標準エラー出力に書き出す

print( "hoge", file=sys.stderror )

命名の慣例

Pythonの関数名: 英小文字とアンダースコアだけ、数字も可?
クラス名:    大文字で始める。MyClassなど
メソッドの第1引数: selfにする
アトリビュート、メソッドの先頭に _がついたもの: 外部から書き換えしてはいけないという印。(クラス内部で使用するものである)
アトリビュート、メソッドの先頭に __がついたもの: 外部からアクセス禁止される
from モジュール名 import クラス名
 モジュール名は、ファイル名と同じ
 クラス名以外にインスタンスを指定できる?
クラスの初期化メソッド __init__
 ふつうは継承したクラスの初期化メソッドを super().__init__(hoge)として呼ぶ
新しい話題の投稿 | スレッド表示へ

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS