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/ (ここの、メニューのドキュメントに和訳ドキュメントがある。全モジュール索引もあり)

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

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

>>> dir( hoge )

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

>>> help( hoge )

tkinerモジュール

(注) 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

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モジュール

numpy.empty( [ ncol, nrow ], dtype=numpy.float64 )

行のリスト?

mpi4pyモジュール

MPIモジュールによる並列化
importすると、並列実行すると思われる。

comm = MPI.COMM_WORLD

anacondaなどによる環境作成

パッケージ(pythonやモジュール)のインストール方法の種類

python自体のインストールと利用バージョン切替

モジュール・パッケージのインストールと使用・不使用切替

anacondaによる condaコマンドは、

  1. 科学計算技術計算のモジュールが豊富(らしい)
  2. condaによる環境切替ができる(pythonバージョンやモジュール)

そのため、モジュール間の依存バージョン、依存するpython自体のバージョン、の整合性をとるには condaが楽だろう。 なお、"環境"は、実際には仮想ではないが "仮想環境"と日本語では呼ばれているようだ。

リンク



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環境であることを確認できる
jupyterパッケージをインストールしている場合
  cd
  jupyter notebook --no-browser --port=8800 --ip=0.0.0.0
  示されたURLをwebブラウザで開く。
  なお、ポートが使われていたら、1増えた番号が使われるようだ。

弘大JupyterHub


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