前提・実現したいこと
Pythonの勉強を始めたプログラミング初学者です。
練習として、寿司打というタイピングゲームの結果画面をスクリーンショットとして保存しておき、その写真からPythonが自動でスコアなどの情報を読み取り、CSVファイルとして保存してくれるといったようなプログラムを作成しました。
エラーなどはなく思い通りに実行できたのですが、コードが冗長になってしまっている気がしたので、ご経験の豊富な方にコードの改善をお願いしたく質問させていただきました。
コードは以下の通りです。独学で勉強をしていますがもっと成長したいので見ていただけると幸いです。
該当のソースコード
python
1from PIL import Image 2import pyocr 3import pyocr.builders 4import glob 5import os 6import datetime 7import time 8import numpy as np 9import csv 10import math 11 12tool = pyocr.get_available_tools()[0] 13 14# 情報を取得したい写真のパスをリストに格納 15target_path = glob.glob('C:\Users\~\Pictures\Screenshots\*.png') 16 17# 以前実行した日時を取得 18prev_time = np.loadtxt(fname="time.csv") 19# 最終更新を現在時刻に書き換え 20time_manege = [time.time()] 21np.savetxt(fname="time.csv", X=time_manege) 22 23# ここにファイルの作成日時を格納する 24time_list = [] 25 26# スクリーンショットフォルダ内のファイル作成日時を読み取る 27for index, item in enumerate(target_path): 28 unix_time = os.path.getctime(item) 29 time_list.append(unix_time) 30 31 # 前回の更新日よりも古ければパスを除去 32 if prev_time > unix_time: 33 target_path[index] = "" 34 35# ここから文字の読み取り開始 36for index1, item1 in enumerate(target_path): 37 38 # 読み取った文字を格納するためのリスト 39 data_list = [] 40 41 # ファイルが寿司打のものではなかった時に処理をやめる 42 flag = False 43 44 # 更新日フィルターで除去されていないファイルのとき 45 if item1 != '': 46 pic_list = [ 47 Image.open(item1).crop((842, 276, 938, 303)), # im_course 48 Image.open(item1).crop((813, 328, 904, 352)), # im_price 49 Image.open(item1).crop((783, 477, 847, 508)), # im_correct 50 Image.open(item1).crop((1053, 477, 1115, 508)) # im_wrong 51 ] 52 53 # 文字の読み取り 54 for index2, item2 in enumerate(pic_list): 55 text = tool.image_to_string(item2, lang='eng', 56 builder=pyocr.builders.TextBuilder()) 57 if index2 == 0: 58 if text == ">» 5,000": 59 text = 5000 60 if text != 5000 and text != "10,000": 61 flag = True 62 break 63 64 # まず日時の入力 65 std_time = datetime.datetime.fromtimestamp(math.floor(time_list[index1])) 66 std_time = str(std_time) 67 data_list.append(std_time) 68 69 if type(text) == str: 70 text = text.replace(",", "") 71 text = int(text) 72 data_list.append(text) 73 74 if flag == False: 75 with open('data.csv', 'a', newline="") as f: 76 writer = csv.writer(f) 77 writer.writerow(data_list) 78