韜晦日記

韜晦日記

Rietveldよりもプログラミングメインになりつつある

Rietveld解析初心者による備忘録とつぶやき

Pythonに関するメモ

完全に個人的なメモ

hydrogenを使ってplotlyが実行できない。

何をやってもエラーが解決されず、絶望したが再起動したら直った。色々やったので直接的な解決策がこれで正しいいのか分からないが、おそらく以下の通りであろう。 ipythonをインストール エラー時に表示されるコマンドを実行して再起動すると直った。

ファイルを開く際にUnicodeDecodeErrorに襲われる。

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x96 in position

こンな感じのエラーだ。Pythonエンコードはデフォルトでutf-8なのでそれ以外のファイルを開くと言いそうな。 簡単な解決方法として読み込むファイルの文字コードutf-8に変換するそれだけで良い。 openメソッドの引数は以下のようになっている。

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

引数のmodeは以下のような設定が可能.

文字 意味
'r' 読み込み用に開く (デフォルト)
'w' 書き込み用に開き、まずファイルを切り詰める
'a' 書き込み用に開き、ファイルが存在する場合は末尾に追記する
'x' 排他的な生成に開き、ファイルが存在する場合は失敗する
'b' バイナリモード
't' テキストモード (デフォルト)
'+' ディスクファイルを更新用に開く (読み込み/書き込み)
'U' ユニバーサル改行 モード (非推奨)

関数の可変長引数

引数の先頭に*をつけることで可変長引数とすることができる。

# 引数2つ、戻り値なしの関数の定義
def function(*arg):
    print(sum(arg))

# 引数2つを入れて、関数の呼び出し
function(2, 4)

この時、argはタプル型であることに注意しなければならない。

正規表現に関して

import re

で使う。 使える関数は以下の通り

  • 文字列の先頭がパターンにマッチするかを調べるmatch()

  • 先頭に限らずパターンにマッチするかを調べるsearch()

  • マッチする部分すべてをリストで返すfindall()

  • マッチする部分すべてをイテレータで返すfinditer()

  • マッチした部分を置換するsub()、subn()

  • パターンで文字列を分割するsplit()

  • 正規表現オブジェクトをコンパイルするcompile()

検索を行う前に正規表現のパターンをコンパイルするか、関数の引数にそのままパターンを渡す方法がある。 パターンをコンパイルするというのは、compile()関数を使ってコンパイルしたパターンをメソッド?クラス?として使うようだ。

import re
regex = r'ab+'
text = "abbabbabaaabb"
pattern = re.compile(regex)
matchObj = pattern.match(text)

この時、パターンの前にあるrは文字列のバックスラッシュをそのままバックスラッシュとして扱えるようにするための物

またパターンにそのまま引数として与える場合は以下のようにかく。

import re
regex = r'ab+'
text = "abbabbabaaabb"
matchObj = re.match(regex, text)

Hydrogenに関するメモ

実行結果の表示を別ウィンドで

command+shift+pでHydrogen : Toggle Output Area とするといい。

実行結果の削除

実行を繰り返しながらコードを書いていると実行結果が鬱陶しくなる時がある。 そんな時はCtrl+Shift+BackSpace

クラスに関して

if name == ‘main’:について

pythonのファイルは直接実行されるとnameという変数が自動で作られ、さらに実行しているスクリプトのモジュール名が自動的に代入される。 Pythonスクリプトを直接実行した時には、そのスクリプトファイルは「main」という名前のモジュールとして認識される。 「if name == ‘main’:」の意味は、「直接実行された場合のみ実行し、それ以外の場合は実行しない」という意味 ちなみに、atomifmainとタイプすると自動補完で出せる。

リスト全体に同じ関数を適用

map関数 listの全て要素に対して同じ処理を行う - Python学習講座