忘れがちなPython

# ■ スクリプト起動

~~~shell-session
$ sample.py
~~~

~~~python:sample.py
#!/usr/bin/env python
~~~

# ■ 文字コード指定

~~~python:utf-8指定
# coding=utf-8
~~~

```utf-8``` ：UTF-8
```Shift_JIS``` ：SJIS

# ■ コメント
~~~python
# single-line comment

'''
multi-line comment
'''

"""
multi-line comment
"""
~~~

# ■ 引数

## 引数の数の参照
~~~python
import sys

print(len(sys.argv))
~~~

## 引数の参照
~~~python
print(sys.argv[1]) # 第一引数
print(sys.argv[2]) # 第二引数
~~~

# ■ 関数

## 関数定義
~~~python
def funcAdd(input1, input2):
  print('Result : %d' % input1 + input2)
  return input1 + input2
~~~

## 関数起動
~~~python
val3 = funcAdd(val1, val2)
~~~

## 直接実行のみ起動
~~~python
if __name__ == '__main__':
  func()
~~~

# ■ 文字列/数値出力

## 左寄せ
~~~python
>>> count = 100 * 2
>>> title = 'count'
>>> print('%s : %-5d回' % (title, count))
count : 200  回
~~~

## 0埋め
~~~python
>>> print('%s : %05d回' % (title, count))
count : 00200回
~~~

## 符号付き
~~~python
>>> print('%s : %+5d回' % (title, count))
count :  +200回
~~~

## 改行なし
~~~python
output = "abc"
print(output, end='')
~~~

## 空白行挿入
~~~python
print('\n', end='')
~~~

## 文字列 ⇒ 数値変換
~~~python
>>> output="20"
>>> print(int(output))
20
>>> print(int(output, 16))
32
~~~

## 数値 ⇒ 文字列変換
~~~python
>>> output=20
>>> print("answer : " + str(output))
answer : 20
~~~

# ■ 文字列操作
## 連結
~~~python
>>> output = "a" + "b" + "c"
>>> print(output)
abc
~~~

## 部分取得
~~~python
>>> output = "a" + "b" + "c"
>>> print(output[1])
b
>>> print(output[0:2])
ab
>>> print(output[1:])
bc
~~~

## 文字列置換
~~~python
>>> value = "0xFFFF"
>>> print(value.replace('0x', ''))
FFFF
~~~

## 文字列検索
~~~python:小文字検索
output = "result : output"
index = output.find("output")
if index != -1:
    echo "検索一致"
else:
    echo "検索不一致"
~~~

~~~python:大文字／小文字区別なし
output = "result : output"
index = output.upper().find("OUTPUT")
print(index) # → 9
index = output.upper().find("x")
print(index) # → -1
~~~

~~~python:リスト登録パターンとの比較
wordList = ["pattern1", "pattern2", "pattern3"]
targetWord = "2"
for word in wordList
  if word in targetWord: 
    echo "検索一致"
    break
  else:
    echo "検索不一致"
~~~

## 拡張子取得
~~~python
>>> import os.path
>>> path, extension = os.path.splitext("/foo/bar/output.txt")
>>> print(path)
/foo/bar/output
>>> print(extension)
.txt
~~~

## ファイル名取得
~~~python
>>> import os.path
>>> filename = os.path.basename("/foo/bar/output.txt")
>>> print(filename)
output.txt
~~~

## 文字列をスペースで区切りリスト格納
~~~python
>>> string = "aaa bbb ccc"
>>> column = string.strip().split())
>>> print(column)
['aaa, 'bbb', 'ccc']
>>> print(column[0])
aaa
~~~

# ■ 分岐

## if文

~~~python
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文

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

## while文

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

# ■ ファイル入出力
## テキストファイル読み込み
~~~python
import sys

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

```r``` :  読み出し専用

## バイナリファイル読み込み
~~~python
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``` : バイナリモードで読み出し専用


## ファイル書き込み
~~~python
output = open('write.txt', 'w')
output.write('abc\n')
output.write('def\n')  
output.close()
~~~

# ■ リスト
## リスト作成
~~~python
>>> test = [0, 1, 'A', 'B', 1]
>>> test[3]
'B'
~~~

## 位置の検索
~~~python
>>> test = [0, 1, 'A', 'B', 1]
>>> test.index(1)
1
~~~

## 値の一致する要素数
~~~python
>>> test = [0, 1, 'A', 'B', 1]
>>> test.count(1)
2
~~~

## 要素数のカウント
~~~python
>>> test = [0, 1, 'A', 'B', 1]
>>> len(test)
5
~~~

## リスト更新
~~~python
>>> test = [0, 1, 'A', 'B', 1]
>>> test[1] = 2
>>> test
[0, 2, 'A', 'B', 1]
~~~

## リスト追加
~~~python
>>> 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]
~~~

## リスト挿入
~~~python
>>> test = [0, 1, 'A', 'B', 1]
>>> test.insert(2, 'C')
>>> test
[0, 1, 'C', 'A', 'B', 1]
~~~

## リスト削除
~~~python
>>> test = [0, 1, 'A', 'B', 1]
>>> test.remove(1)
>>> test
[0, 'A', 'B', 1]
~~~

# ■ ディクショナリ
## 登録・読み込み
~~~python
>>> test = {'a':10, 'b':20}
>>> test['a']
10
~~~

## 更新
~~~python
>>> test = {'a':10, 'b':20}
>>> test['a'] = 30
>>> test
{'a': 30, 'b': 20}
~~~

## 削除
~~~python
>>> test = {'a':10, 'b':20}
>>> del test['a']
>>> test
{'b': 20}
~~~

## キー取得
~~~python
>>> test = {'a':10, 'b':20}
>>> test.keys()
['a', 'b']
~~~

## 値取得
~~~python
>>> test = {10:'a', 20:'b'}
>>> test.values()
['a', 'b']
~~~

## キーの一致確認
~~~python
>>> test = {10:'a', 20:'b'}
>>> 10 in test
True
>>> 'a' in test
False
~~~


# ■ 終了ステータス指定

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

# ■ 時間取得

~~~python
import time

start_time = time.time()
~~~

# ■ メール操作
## 送信
~~~py: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()
~~~

# ■ ライブラリ管理

## インストール
~~~shell-session:version指定なし
$ pip install LibraryName
~~~

~~~shell-session:version指定あり
$ pip install LibraryName=2.0
~~~

## アンインストール
~~~shell-session
$ pip uninstall LibraryName
~~~

## インストール済みライブラリ表示
~~~shell-session
$ pip freeze
~~~

## ライブラリ詳細情報表示

~~~shell-session
$ pip show LibraryName
~~~