LoginSignup
4
4

More than 5 years have passed since last update.

python: personal memo

Last updated at Posted at 2014-04-28

.emacs

(add-hook 'python-mode-hook
          '(lambda ()
           (outline-minor-mode)
           (setq outline-regexp " *\\(def \\|clas\\|#hea\\)")
           (hide-sublevels 1)))

.emacsに上記を記述しておくと,outline minor modeが使えて,defclassなどが折り畳まれるので長いコードも見易い.

import

>>> import numpy as np

こうすることで,後々numpyをnpと省略することができる.

help

>>> help(numpy)
>>> help(np.arange)

などとして,numpyのヘルプや関数のヘルプを見ることができる.

ipythonを使えば,

In [1]: np.arange?

として,?を末尾につけることでヘルプを見ることができる.この場合,そのソースファイルの場所も示してくれる.

docstring

pythonでは,ファイルの先頭にあるコメントや,関数の先頭にあるコメントがdocstringとして扱われて,モジュールや関数のドキュメントとなる.helpコマンドなどで呼び出される.

hoge.py
u"""一行目はNAMEというブロック.

全体はDESCRIPTIONというブロックとなる.
先頭のuはutf-8を指定する文字列だよということ.
"""

def func():
    u"""これは関数の説明.
    関数宣言のすぐ後に書くべし.
    """

class newClass:
    u"""これはnewClassの説明.
    class宣言のすぐ後に書くべし.
    """

    def foo():
        u"""クラスnewClassの関数fooの説明
        コメントを,reStructuredText形式で書いておくと
        ウェブ表示の際にキレイかもしれない.
        """

ファイル入力

f=open('filename','r')
for line in f.readlines():
    data= line.split()
    x= data[0]
    ...
f.close

みたいな感じで,readlines()関数や,readline()関数などで読み込む.
readlines()関数は,すべての行を読み込んでそれを配列として返す.
readline()関数は,一行づつ読み込む.

ファイルの存在確認

>>> import os
>>> os.path.exists('hogedir/hogefile')

ファイル/フォルダの移動

shutilを利用する.
src/hoge.txtを,dst/以下に移動したい場合,

>>> import shutil
>>> shutil.move('src/hoge.txt','dst/')

出力のフォーマット

古いフォーマット指定は,

"pi is 15.7f" % math.pi
'pi is       3.1415927'
"pi is %15.7f, e is %15.7f" % (math.pi,math.e)
'pi is       3.1415927, e is       2.7182818'

のように%に続くタプルで値を代入する感じだった.
新しいフォーマット指定は,

'pi is {0:15.7f}, e is {1:15.7f}'.format(math.pi,math.e)
'pi is       3.1415927, e is       2.7182818'

のように,文字列のformat関数で値を代入する.文字列内に{}でくくって,何番目の引数かとか,フォーマットとかを記述する.

>>> "{:>20}".format('test')
'                test'
>>> "{:<20}".format('test')
'test                '
>>> "{:^20}".format('test')
'        test        '
>>> "{:*^20}".format('test')
'********test********'

上記のように,左右や中央寄せと文字詰めなどが指定できる.

0で埋めた数値を出力したい場合,

>>> "{:05d}".format(123)
'00123'

文字列と数値の間の変換

>>> int("12")
12
>>> int("12.3")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '12.3'
>>> float("12.3)
12.3

つまり,しっかりと整数を表す文字列をintで変換すれば整数になるが,整数を表していない文字列を整数に変換しようとするとエラーとなる.

逆に数値を文字列に変換したい場合は,以下.

>>> str(math.pi)
'3.14159265359'

シェルコマンドを実行する

os.system

>>> import os
>>> os.system('ls')
main.py     main.py~    mod1.py     mod1.pyc
0

commands.getoutput

>>> import commands
>>> commands.getoutput('ls')
'main.py\nmain.py~\nmod1.py\nmod1.pyc'

subprocess.Popen

>>> import subprocess
>>> process.Popen(['sleep','10'])
>>> process.wait()

とすると,sleep 10が終了するまで待つ.上の例で,process.pidとすればプロセスIDを取得できる.

作業ディレクトリ関連

>>> os.getcwd()

で現在の作業ディレクトリを取得でき,

>>> os.chdir('hoge/foo/')

として,ディレクトリを移動できる.これは子プロセスでの話しなので,このpythonスクリプトを実行しても,そのプロセスが終了したら元のディレクトリに戻る.

時間計測

  • 実経過時間の測定にはtime.time()関数.
  • CPU時間の測定にはtime.clock()関数.
import time
t0= time.time()
...
print time.time()-t0

などとして計測する.

配列の要素を消去する

>>> a= range(10)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del a[4]
>>> a
[0, 1, 2, 3, 5, 6, 7, 8, 9]
>>> a.pop(3)
3
>>> a
[0, 1, 2, 5, 6, 7, 8, 9]
>>> a.remove(9)
>>> a
[0, 1, 2, 5, 6, 7, 8]

上記ように,delpopremoveがある.

やりだすとたくさんあるから,ここらでやめる.
あとは個別の投稿にすべきなんだろう.

4
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4