2018年5月13日日曜日

Python基本コマンドメモ

自分の使い方メモです。

オブジェクト変数varを消す。初期化したいときなどに使う。


del var

オブジェクトの属性を全て見る。コマンドを調べるときに使う。


dir(object)

 リストで文字列から1文字ずつを要素にしたリストが作れる。


>>> list('hogehoge')

['h', 'o', 'g', 'e', 'h', 'o', 'g', 'e]

osモジュールでディレクトリ操作


import os

# ディレクトリ作成
 os.mkdir(path)

# カレントディレクトリを返す
os.path.abspath('.')

#ディレクトリ内のファイル名を取得(※ディレクトリ名も拡張子なしで取得される)
os.lisrdir()

import は1度読むと再読み込みしてくれない。reloadする

import importlib
importlib.reload(moduleA)

数字のゼロ埋め


month = 1 # 01にしたい

print('{:02}'.format(int(month)))

でできるがJavaScript的?な書き方で

month = 1
print(('0'*2 + str(month))[-2:])

でもOK。この書き方の便利なところはゼロ埋め桁数を操作しやすいこと

n = 2 # ゼロ埋め桁数
month = 1
print(('0'*n + str(month))[-n:])


formatを使うときはこのように書けばnで変えられる。
month = 1
n = 3
print(('{:0'+str(n)+'}').format(2))

Out: '003'

数字のゼロ埋め その2


2018年1月1日→ '20180101'を作りたいとき

import datetime
now = datetime.datetime.now()

print('{:04}{:02}{:02}'.format(now.year, now.month, now.day) )


スペースで埋める

'{:5}'.format(22)

Out: '   22'

二種類の文字をformatでゼロ埋め

4桁と5桁でゼロ埋めする例。0, 1は普段のformatのときと同じで、省略可能。

'{0:04}{1:05}'.format(22, 111)

Out: '002200111'

文字列のzfill属性を使う

"22".zfill(6)

とやると、文字列にたいして6桁でゼロ埋めするという意味。
Out: '000022'

数字ではなく文字に対してもできます。

"aa".zfill(6)

Out: '0000aa'

関数のreturn を複数にするとき


def hoge():
    # hoge
    return a, b

とかくとタプルになって

a, b = hoge()

で受け取ることができる。

return [a, b]

と書いてもよい。

ファイルの最終更新日


import os
import time

# os.path.getmtime()

# time.ctime() UNIX時間から変換する

file = "some_path"

print("last modified: {}".format(time.ctime(os.path.getmtime(file))))

pandas dataframeでインデックスを更新する


df.index = range(len(df))


proxy 環境で git cloneができないとき 、以下を参照のこと

 http://sushichop.blogspot.jp/2013/09/git.html

IPython(jupyter)でhtml表示をする


from IPython.core.display import HTML
from IPython.core.display import display

display(HTML('<b>test bold</b>'))
display(HTML('<i>test italic</i>'))





クラス名を調べる

属するクラスの名前を調べます。

x.__class__.__name__

x.__name__

だけで出せるときもあるみたいですが。

not all arguments converted during string formattingエラー

プレースホルダの数(%s)と、.format()で与える値の数が違っていると出ます

文字列のなかにある文字が何回現れるかを調べる


リスト内包表記でカウントしてみます。

text = '(%s, %s, %s)'
len([t for t in text if t == 's']) # 3


Pythonの変数のあとにアンダースコア(_)を入れるのは、予約語との衝突をさけるための慣例(?)


list_
exec_

などの使い方をします。list, execという予約語との衝突をさけて変数を作るためです。


Python launcher

コマンドラインでpyとだけ記述してPythonを起動しているときがあります。

py

と入力すると、インストールされている中で最新のバージョンが起動します。

py -2.7

とすると、2.7

py -2

とすると、python2系の中で最新のものが対象になります


Pythonの予約語を変数名に使ってはいけない


予約語というのは、Pythonで使うことが決められている単語、list, printなどのことです。これに変数を代入すると(できますが)、あとで大変なことに・・・。

>>> print = 1
>>> print('test')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable

ということで、printという予約語に 1 を代入してしまったので、printとしての機能はなくなってしまいました。

一行で2つ以上の変数に代入するときの違い

# 1行で2つ代入
# 初期値
a=1
b=2
a, b = b, a # a にb(=2)、b にa(=1)が入る
print(a,b)
-> (2, 1)

aとbは同時に入れ替わっています。
=が終わるまでは上書きされません。

# 別々に代入するとき
# 初期値
a=1
b=2
a = b # a にb(=2)が入る
b = a # b にa(=2)が入る
print(a, b)
-> (2, 2)







0 件のコメント:

コメントを投稿