>>> 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/ (ここの、メニューのドキュメントに和訳ドキュメントがある。全モジュール索引もあり)
インストールされている標準ライブラリはたいてい /usr/lib/pythonXX/内にある。
オブジェクトのメンバを調べる
>>> dir( hoge )
オブジェクトのドキュメントを調べる(ドキュメンテーションが書かれていれば)
>>> help( hoge )
(注) python2は Tkinter、python3は tkinterを importするようだ。名前が異なる。
お気楽 Python/Tkinter 入門
http://www.geocities.jp/m_hiroi/light/pytk01.html
1. Hello world! http://www.shido.info/py/tkinter1.html
PythonのTkinterを使ってみる https://qiita.com/nnahito/items/ad1428a30738b3d93762
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にする アトリビュート、メソッドの先頭に _がついたもの: 外部から書き換えしてはいけないという印。(クラス内部で使用するものである) アトリビュート、メソッドの先頭に __がついたもの: 外部からアクセス禁止される
import モジュール名
from モジュール名 import クラス名 モジュール名は、ファイル名と同じ モジュール内のクラス名以外に、インスタンスや関数を指定できるようだ
クラスの初期化メソッド __init__ ふつうは継承したクラスの初期化メソッドを super().__init__(hoge)として呼ぶ 新しい話題の投稿 | スレッド表示へ
importは、グローバルでも、ローカルにでも可能である。
import math math.sin( 1.23 ) or from math import sin sin( 1.23 )
classはモジュールの中などに作られ、モジュールを importして継承クラスを作れる。 from book import Book class Blog ( Book ) or import book class Blog ( book.Book )
ディレクトリ階層で束ねられたモジュールの集まり
#comment1
''' comment2a '''
""" comment2b """
numpy.empty( [ ncol, nrow ], dtype=numpy.float64 ) 行のリスト?
MPIモジュールによる並列化 importすると、並列実行すると思われる。 comm = MPI.COMM_WORLD
python自体のインストールと利用バージョン切替
モジュール・パッケージのインストールと使用・不使用切替
anacondaによる condaコマンドは、
そのため、モジュール間の依存バージョン、依存するpython自体のバージョン、の整合性をとるには condaが楽だろう。 なお、"環境"は、実際には仮想ではないが "仮想環境"と日本語では呼ばれているようだ。
conda activate [環境名] #アクティベート(環境を設定) conda deactivate #デアクティベート(環境を終了)
conda create -n 環境名 [python[=バージョン] [パッケージ名[=バージョン]] [...]] #環境作成 conda remove -n 環境名 --all #環境の削除
conda info #condaの情報 conda info -e #環境のリスト conda -V #バージョン conda -h #ヘルプ conda config --help #コマンドconfigのヘルプ anaconda search --help #コマンドsearchのヘルプ
conda search [-c チャネル] [--full-name] パッケージ名 #パッケージのバージョンに対応するpythonのバージョン表示 conda install パッケージ名[=バージョン] #現在の環境に、パッケージをインストール conda uninstall パッケージ名 #現在の環境から、パッケージをアンインストール conda list [-n 環境名] #インストールされているパッケージのリスト なお、anaconda下で pipを使ったパッケージのインストールは condaで入れたパッケージを壊しうるので避ける。
環境の保存や、それを使った環境作成 conda env export > ファイル名.yml conda env create -n 新しい環境名 -f ファイル名.yml or conda list --export > ファイル名.txt conda create -n 新しい環境名 -f ファイル名.txt
base環境の複製? conda create -n 新しい環境名 [python=バージョン] anaconda
conda clean --all #不要なパッケージやキャッシュを削除
conda create -n 新しい環境名 --clone もとの環境名 #環境名を変更する conda remove -n もとの環境名 --all
conda config --set env_prompt "({default_env}) " #デフォルトでconda環境のときに付くプロンプトのプレフィックス conda config --set env_prompt "p:" #プロンプトプレフィックスを変更 conda config --set changeps1 false #プロンプトを変更しない echo $CONDA_SHLVL #0以外でconda環境であることを確認できる