プログラミング系のネタをまとめていきます。

基礎

エンコード宣言


ファイルの先頭で

# coding: エンコーディング名
# coding=エンコーディング名

どちらでもOK。

文字コード種類。
※大文字小文字は区別されない。

# coding: utf-8
# coding: shift_jis
# coding: euc-jp
# coding: cp932

変数


型宣言なし。

num = 10

text1 = u"テキスト"		# 2.x系
text2 = "テキスト"		# 3.x系

コメント

1行コメント

# の右側がコメント。
複数行コメントっぽいもの

以下のように、ダブルクォーテーション3つ、あるいは、シングルクォーテーション3つで囲うことで、
コードの実行を無効化出来る。
正確には、文字列(ヒアドキュメント)になっている。

'''
val0 = 100
val1 = 200
val3 = val0 + val1
'''

# シングルクォート、ダブルクォートを使ってネスト可能
'''
val0 = 100
"""
val1 = 200
"""
val3 = val0 + val1
'''

「__name__」, 「__main__」


※アンダースコアは半角文字で。

特定のソースがスクリプトとして起動した時に、「__name__」 には "__main__" という文字列が代入される。
そのソースが別のモジュールから呼び出された時は、それ自信のモジュール名が 「__name__」 に代入される。

モジュールとして呼ばれたかどうかを判定して処理を分岐できる。

タプルとリスト

タプルリスト
アクセス読み取り専用読み書き可
初期化tuple = (10, 20, 30)list = [10, 20, 30]

負の値のインデックス指定

a = [0, 1, 2, 3, 4]

print(a[-1])	# -> 4
print(a[-4])	# -> 1

スライス

配列の指定範囲を取得する。
コロンを使って、
[開始要素のインデックス:終了要素の次のインデックス]
と指定する。

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, 3.xの変更点

対応ライブラリの数


割愛...

パッケージの再構成


割愛...

print


3.xからは関数になったので、括弧が必要。
2.xprint "string"
print u"文字列"
3.xprint("string")
print(u"文字列")

文字列の型

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."

ヒアドキュメント


クォート記号3つ。

str = """
line1
line1
"""

基本操作


# 連結
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    "

改行コード


import os

str = "test string" + os.linesep

関数


# 関数宣言(第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...


ラムダ式


func = lambda val1, val2 : vul1 + val2
print func(100, 20)						# -> 120

ファイル操作

テキストファイル読み込み


f = open("text.txt", "r")

for row in f:
	print row

f.close()

テキストファイル書き込み


f = open("text.txt", "w")

f.write("テキスト")

f.close()

文字のエンコード指定


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		# フルパスで出力される

関連付けされているアプリケーションからファイルを開く


import os
os.startfile(filepath)

参考サイト


公式サイト
https://www.python.org/

Pythonの入門から応用までの学習サイト
http://www.python-izm.com/

Menu

メインコンテンツ

プログラミング

機器

Macツール

各種情報

Wiki内検索

おまかせリンク

Androidアプリ

AdSense

技術書


管理人/副管理人のみ編集できます