Python

忘れがちなPython

■ スクリプト起動

$ sample.py
sample.py
#!/usr/bin/env python

■ 文字コード指定

utf-8指定
# coding=utf-8

utf-8 :UTF-8
Shift_JIS :SJIS

■ コメント

# single-line comment

'''
multi-line comment
'''

"""
multi-line comment
"""

■ 引数

引数の数の参照

import sys

print(len(sys.argv))

引数の参照

print(sys.argv[1]) # 第一引数
print(sys.argv[2]) # 第二引数

■ 関数

関数定義

def funcAdd(input1, input2):
  print('Result : %d' % input1 + input2)
  return input1 + input2

関数起動

val3 = funcAdd(val1, val2)

直接実行のみ起動

if __name__ == '__main__':
  func()

■ 文字列/数値出力

左寄せ

>>> count = 100 * 2
>>> title = 'count'
>>> print('%s : %-5d回' % (title, count))
count : 200  

0埋め

>>> print('%s : %05d回' % (title, count))
count : 00200

符号付き

>>> print('%s : %+5d回' % (title, count))
count :  +200

改行なし

output = "abc"
print(output, end='')

空白行挿入

print('\n', end='')

文字列 ⇒ 数値変換

>>> output="20"
>>> print(int(output))
20
>>> print(int(output, 16))
32

数値 ⇒ 文字列変換

>>> output=20
>>> print("answer : " + str(output))
answer : 20

■ 文字列操作

連結

>>> output = "a" + "b" + "c"
>>> print(output)
abc

部分取得

>>> output = "a" + "b" + "c"
>>> print(output[1])
b
>>> print(output[0:2])
ab
>>> print(output[1:])
bc

文字列置換

>>> value = "0xFFFF"
>>> print(value.replace('0x', ''))
FFFF

文字列検索

小文字検索
output = "result : output"
index = output.find("output")
if index != -1:
    echo "検索一致"
else:
    echo "検索不一致"
大文字/小文字区別なし
output = "result : output"
index = output.upper().find("OUTPUT")
print(index) # → 9
index = output.upper().find("x")
print(index) # → -1
リスト登録パターンとの比較
wordList = ["pattern1", "pattern2", "pattern3"]
targetWord = "2"
for word in wordList
  if word in targetWord: 
    echo "検索一致"
    break
  else:
    echo "検索不一致"

拡張子取得

>>> import os.path
>>> path, extension = os.path.splitext("/foo/bar/output.txt")
>>> print(path)
/foo/bar/output
>>> print(extension)
.txt

ファイル名取得

>>> import os.path
>>> filename = os.path.basename("/foo/bar/output.txt")
>>> print(filename)
output.txt

文字列をスペースで区切りリスト格納

>>> string = "aaa bbb ccc"
>>> column = string.strip().split())
>>> print(column)
['aaa, 'bbb', 'ccc']
>>> print(column[0])
aaa

■ 分岐

if文

if len(sys.argv) < 2:
  pass
elif sys.argv[1] == '0':
  print('引数は0')
elif sys.argv[1] == '1'
  print('引数は1')
else:
  print('引数は0,1以外')

== : 一致
!= : 不一致

■ ループ

for文

for loop in range(10):
  print(loop)
  if loop == 5:
    break

while文

loop = 1
while loop > 0:
  print(loop)
  loop -= 1

■ ファイル入出力

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

import sys

input = open(sys.argv[1], 'r')
lines = input.readlines()
for line in lines:
  print(line, end='')
input.close()

r : 読み出し専用

バイナリファイル読み込み

import sys

offset = 100
binaryVal = ''
input = open(sys.argv[1], 'rb') 
lines = input.readlines()
lines.seek(offset)
binaryVal = str(binascii.hexlify.lines.read(16))
print(binaryVal)

input.close()

rb : バイナリモードで読み出し専用

ファイル書き込み

output = open('write.txt', 'w')
output.write('abc\n')
output.write('def\n')  
output.close()

■ リスト

リスト作成

>>> test = [0, 1, 'A', 'B', 1]
>>> test[3]
'B'

位置の検索

>>> test = [0, 1, 'A', 'B', 1]
>>> test.index(1)
1

値の一致する要素数

>>> test = [0, 1, 'A', 'B', 1]
>>> test.count(1)
2

要素数のカウント

>>> test = [0, 1, 'A', 'B', 1]
>>> len(test)
5

リスト更新

>>> test = [0, 1, 'A', 'B', 1]
>>> test[1] = 2
>>> test
[0, 2, 'A', 'B', 1]

リスト追加

>>> test = [0, 1, 'A', 'B', 1]
>>> test.append(2)
>>> test
[0, 1, 'A', 'B', 1, 2]
>>> test += [3]
[0, 1, 'A', 'B', 1, 2, 3]

リスト挿入

>>> test = [0, 1, 'A', 'B', 1]
>>> test.insert(2, 'C')
>>> test
[0, 1, 'C', 'A', 'B', 1]

リスト削除

>>> test = [0, 1, 'A', 'B', 1]
>>> test.remove(1)
>>> test
[0, 'A', 'B', 1]

■ ディクショナリ

登録・読み込み

>>> test = {'a':10, 'b':20}
>>> test['a']
10

更新

>>> test = {'a':10, 'b':20}
>>> test['a'] = 30
>>> test
{'a': 30, 'b': 20}

削除

>>> test = {'a':10, 'b':20}
>>> del test['a']
>>> test
{'b': 20}

キー取得

>>> test = {'a':10, 'b':20}
>>> test.keys()
['a', 'b']

値取得

>>> test = {10:'a', 20:'b'}
>>> test.values()
['a', 'b']

キーの一致確認

>>> test = {10:'a', 20:'b'}
>>> 10 in test
True
>>> 'a' in test
False

■ 終了ステータス指定

if len(sys.argv) < 2:
  print('Input Parameter Error.')
  sys.exit(1)

■ 時間取得

import time

start_time = time.time()

■ メール操作

送信

hotmailから送信
import smtplib
from email.mime.text import MIMEText
from email.header import Header

msg['Subject'] = Header('email subject', 'utf-8')
msg['From'] = 'sender@hotmail.com'
msg['To'] = 'recipient@hotmail.com'
msg = MIMEText('email body')

with smtplib.SMTP('smtp.live.com', 587) as smtp:
    smtp.ehlo()
    smtp.starttls()
    smtp.ehlo()
    smtp.login('sender@hotmail.com', 'password')
    smtp.send_message(msg)
    smtp.close()

■ ライブラリ管理

インストール

version指定なし
$ pip install LibraryName
version指定あり
$ pip install LibraryName=2.0

アンインストール

$ pip uninstall LibraryName

インストール済みライブラリ表示

$ pip freeze

ライブラリ詳細情報表示

$ pip show LibraryName