Python備忘

# Python備忘
自分用も兼ねた内容です。

### 基本
```py
import ------

def main():
    while True:
        #メインの処理
    
if __name__ == '__main__':
    main()
```
### 手動ガベージコレクション
```py
import gc

del 変数名
gc.collect()
```

### 一定回数を繰り返す
```py
for i in range(2):
    #range()の引数に繰り返したい回数を指定
``` 
### 配列を要素の回数繰り返す
```py
for 変数 in 配列:
    #変数を一つずつみてゆく
```

### エラーが出る処理について、確実に処理できるまで繰り返す
```py
import time
import pyautogui as pag

while True:
    try:
        #実行したい処理
        img_d = pag.screenshot() #実行したい処理 この場合はキャプチャ
        #成功した場合
        break #breakでwhileのループを抜ける
    except:
        #成立しなかった場合、エラーが出た場合などの処理
        time.sleep(1) #少し間隔をあける
```

### 本日の日付や時間 Y/m/d 00:00:00の形式の場合
```py
from datetime import datetime as dt

tdt = dt.now()
today = tdt.strftime('%Y/%m/%d %H:%M:%S')
```

### 画面キャプチャ
```py
import pyautogui as pag

#画面全体をキャプチャ　キャプチャ自体は領域指定しないほうが速い
img = pag.screenshot()

#一部をキャプチャ
img_part = pag.screenshot(region=(0,0,800,500)) #基準点のX、基準点のY、幅、高さ
```
### ファイルを複製する

```py
import shutil

old='old.csv'
new='new.csv'
shutil.copyfile(old,new)
```

### プログラムの終了
```py
import sys

sys.exit()
#エラーを発生させて止める様子。なのでtry～except内だと反応する
```


### ウェブページにアクセス（アクセスするのみ）
```py
import requests

url = 'https://----------'
r = requests.get(url)
```

### ウェブから情報を取得する

```py
import requests
import BeautifulSoup

url = 'https://----------'
r = requests.get(url)
soup = BeautifulSoup(r.text,'html.parser')

p_element = str(soup.p) #例　pタグの情報を取得する場合
h1_element = str(soup.h1) #例　h1タグの情報を取得する場合
```

### キー操作
```py
import pyautogui as pag

#一文字送る
pag.typewrite(['x'])
pag.typewrite(['enter'])

#二つのキーを同時に押す場合
pag.hotkey('alt' , 'f')
pag.hotkey("win" , "up")
```

### 特定のウィンドウが開いているか判定する（＋そのウィンドウを前面に表示させる）
```py
import win32gui

try:
    #ウィンドウがあるか　ない場合はエラーとなり、except側の処理が実行される
    w_hantei = win32gui.FindWindow(None,'ウィンドウの名称')
    #以下、ウィンドウがあった場合の処理
    #ウィンドウを前面に
    win32gui.SetForegroundWindow(w_hantei)

except:
    #以下、ウィンドウがない場合の処理
```

### 該当の画像が画面内にあるか探す（＋その画像部分をクリックする）

```py
import pyautogui as pag

try:
    pic_path = './sample.jpg'
    p = pag.locateOnScreen(pic_path,confidence=.5) #画像を探す　なければエラーとなる。confidenceは感度＝どの程度がばっとした相似度か
    #以下画像があった場合
    x, y = pyautogui.center(p) #該当部分の中心座標を取得
    pyautogui.click(x, y) #クリックする
except:
    #画像がなかった場合の処理はこちら
    pass
```

### ウィンドウ表示を待つ関数
ウィンドウが発生するまで繰り返される（キャッチしたら最前面にし、breakで抜ける）

```py
import time
import win32gui

#--------------------------------
def matsu(window_namae):
#--------------------------------
while True:
    try:
        w_ob = win32gui.FindWindow(None,window_namae)
        win32gui.SetForegroundWindow(w_ob)
        break
    except:
        time.sleep(0.1)
#--------------------------------
```
### 別のプログラムを起動・実行
```py
import subprocess

subprocess.Popen('C:/Program Files (x86)/----------------.exe')
```
### ウェブカメラ画像の利用（画像分析）　例５秒ごとに、半分に縮小して画像を保存
```py
import cv2
import datetime
import time

cap = cv2.VideoCapture(0) #カッコ内は環境（カメラの接続状況・台数によって変わる）
while cap.isOpened():
    ret,frame = cap.read()
    if ret == True:
        #画像を取得できている際の処理を以下に　以下は例

        #ウィンドウに表示
        cv2.imshow('frame',frame)

        #中止の処理
        key = cv2.waitKey(1) & 0xFF
        if key == ord('q'):
            break

        #画像を縦半分、横半分にリサイズ
        dst = cv2.resize(frame,dsize=None,fx=0.5,fy=0.5) 
        
        #画像を保存する
        dt = datetime.datetime.today()
        fnm = dt.strftime('%Y%m%d_%H%M%S')
        fileName = fnm + '.png'
        cv2.imwrite(fileName, dst)
        time.sleep(4)

cv2.destroyAllWindows()
cap.release()
```