最終更新: bokkuri_orz 2014年10月11日(土) 22:05:16履歴
ファイルの先頭で
# coding: エンコーディング名 # coding=エンコーディング名
どちらでもOK。
文字コード種類。
※大文字小文字は区別されない。
# coding: utf-8 # coding: shift_jis # coding: euc-jp # coding: cp932
以下のように、ダブルクォーテーション3つ、あるいは、シングルクォーテーション3つで囲うことで、
コードの実行を無効化出来る。
正確には、文字列(ヒアドキュメント)になっている。
''' val0 = 100 val1 = 200 val3 = val0 + val1 ''' # シングルクォート、ダブルクォートを使ってネスト可能 ''' val0 = 100 """ val1 = 200 """ val3 = val0 + val1 '''
※アンダースコアは半角文字で。
特定のソースがスクリプトとして起動した時に、「__name__」 には "__main__" という文字列が代入される。
そのソースが別のモジュールから呼び出された時は、それ自信のモジュール名が 「__name__」 に代入される。
モジュールとして呼ばれたかどうかを判定して処理を分岐できる。
配列の指定範囲を取得する。
コロンを使って、
[開始要素のインデックス:終了要素の次のインデックス]
と指定する。
a = [0, 1, 2, 3, 4] print(a[1:3]) # -> [1, 2] print(a[-1:-4]) # -> [] print(a[-4:-1]) # -> [1, 2, 3] print(a[:2]) # -> [0, 1] print(a[3:]) # -> [3, 4] print(a[:]) # -> [0, 1, 2, 3, 4]
# 10回繰り返し。rangeは開始、終了間の連続した値を返し、終了値は含まない for val in range(0, 10): print val # タプルの繰り返し処理 for val in tuple: print val # リストの繰り返し処理 for val in list: print val
# 初期化 dict = {'key1':'val1', 'key2':'val2', 'key3':'val3'} # ループ処理 for key in dict: print key print dict[key] # キーをリスト化 key_list = dict.keys() # キーの存在チェック(ver 2.x 系) if dict.has_key('key1'): print "exist" # キーの存在チェック(ver 3.x 系) if 'key1' in dict: print "exist"
import sys # argvを利用するためのモジュール num = len(sys.argv) # 引数の個数 print sys.argv[0] # 一つ目は実行中のスクリプトファイル名 for i in range(1, num): print sys.argv[i] # 残りの引数
2.x系 | str型 unicode型 |
3.x系 | str型(内部でunicode情報を持つ) |
●2.x系
str1 = "test" str2 = u"テスト" print type(str1) # => <type 'str'> print type(str2) # => <type 'unicode'>
●3.x系
str1 = "test" str2 = "テスト" print(type(str1)) # => <class 'str'> print(type(str2)) # => <class 'str'>
違いは特になさそう。
例えばシングルクォート囲みの中にシングルクォートを使いたい場合は、円記号でエスケープが必要だけど、
その中でダブルクォートを使う場合はエスケープ不要。
その逆も同様。
str1 = 'I can\'t speak english.' str2 = "I can't speak english."
# 連結 str0 = "012" str1 = "345" str2 = str0 + str1 print str2 # -> 012345 # 数値 → 文字列 val0 = 100 print str(val0) # -> 100 # 置換 print str2.replace("345", "678") # -> 012678 # 分割 str3 = "1,2,3,4" print str3.split(",") # -> ['1','2','3','4'] # ゼロ埋め str4 = "1234" print str4.zfill(8) # -> 00001234 print str4.rjust(8, "_") # -> ____1234 # 検索 str5 = "abcdefg" # 文字列の先頭の検索 print str5.startswith("abc") # -> True print str5.startswith("def") # -> False # 文字列中の任意の場所の検索 print "cd" in str5 # -> True print "hi" in str5 # -> False # 先頭・末尾の空白削除 str6 = " aaa " print str6.rstrip() # 末尾の空白削除 -> " aaa" print str6.lstrip() # 先頭の空白削除 -> "aaa "
# 関数宣言(第3引数は省略可) def func(val0, val1, val2=10): return val0 + val1 + val2 # 関数呼び出し result = func(10, 20) # -> 40
- クラスのメソッドには self が必須。
- メンバ変数の宣言は無し。
# クラス宣言 class TestClass: # コンストラクタ def __init__(self, param): self.param = param # メンバ変数 def output(self): print("param = " + str(self.param)) # インスタンス生成 testClass = TestClass(100) testClass.output() # -> param = 100
継承と、ついでにstaticメンバ変数、staticメソッドも。
# クラス宣言 class TestExtends(TestClass): static_param = 0 # staticメンバ変数 def __init__(self, param): TestClass.__init__(self, param) def setParam(self, param): TestExtends.static_param += 1 self.param = param def outputStatic(self): print("static_param = " + str(TestExtends.static_param)) # staticメソッド(第1引数は cls) @classmethod def static_method(cls): TestExtends .static_param += 1 print("static_param = " + str(TestExtends.static_param)) # インスタンス生成、メソッド呼び出し testClass = TestExtends(200) testClass.setParam(300) testClass.output() # -> param = 300 testClass.outputStatic() # -> static_param = 1 testClass.setParam(444) testClass.output() # -> param = 444 testClass.outputStatic() # -> static_param = 2 # staticメソッド呼び出し TestExtends.static_method() # -> static_param = 3 TestExtends.static_method() # -> static_param = 4 TestExtends.static_method() # -> static_param = 5
Python のクラスメソッド デコレータ @classmethod, @staticmethod
http://jutememo.blogspot.jp/2008/09/python-classme...
import codecs f = codecs.open("text.txt", "r", "shift_jis") # その他の文字エンコード "euc_jp", "utf-8"
import os filepath = "c:/temp" if os.path.exists(filepath): print filepath + "is exist." if os.path.isfile(filepath): print filepath + " is file." if os.path.isdir(filepath): print filepath + " is directory." else: print filepath + " is not exist."
import os import shutil dir_path = "c:/temp" os.mkdir(dir_path) os.mkdirs(dir_path + "/path1/path2") #os.rmdir(dir_path + "/path1/path2") # 指定のディレクトリを削除 #os.removedirs(dir_path) # 削除対象のディレクトリが空でないとエラーになる #shutil.rmtree(dir_path) # 再帰的削除
import os import shutil shutil.copy("c:/temp/src.txt", "c:/temp/dst.txt") # ファイル名を変更してコピー shutil.copytree("c:/temp/, "d:/temp") # ディレクトリコピー
import os.path # ファイル名、拡張子の分離 filename = "hoge.txt" name, ext = os.path.splitext(filename) #str = os.path.splitext(filename) -> str[0]:ファイル名、str[1]:拡張子 # フルパスからファイル名を取得 filepath = "c:/temp/dir/filename.txt" filename = os.path.basename(filepath) # パスからディレクトリ名を取得 dirname = os.path.dirname('Users/user/Documents/test.txt')
●サブフォルダも含めて、すべてのファイルを取得。
import os list = os.listdir(‘/path/to/dir/’) for file in list: print file # ファイル名が出力される
●対象フォルダのファイルのみ取得
import glob list= glob.glob(‘/path/to/dir/*.*’) for file in list: print file # フルパスで出力される
最新コメント