前提・実現したいこと
レースが不成立の場合そのレースを飛ばして次に進んでほしい。
発生している問題・エラーメッセージ
不成立がでたレースでずっとループ?してる。
該当のソースコード
python
1ソースコード 2#解凍したテキストファイルの格納先を指定 3TEXT_FILE_DIR = "/content/drive/MyDrive/results_txt/" 4 5# CSVファイルの保存先を指定 6CSV_FILE_DIR = "/content/drive/MyDrive/results_csv_detail/" 7 8# CSVファイルの名前を指定 ※YYYYMMDDには対象期間を入力 9CSV_FILE_NAME = "results_20130101-20211021.csv" 10 11# CSVファイルのヘッダーを指定 12CSV_FILE_HEADER = "レースコード,タイトル,日次,レース日,レース場,\ 13レース回,レース名,距離(m),天候,風向,風速(m),波の高さ(cm),決まり手,\ 14単勝_艇番,単勝_払戻金,複勝_1着_艇番,複勝_1着_払戻金,複勝_2着_艇番,複勝_2着_払戻金,\ 152連単_組番,2連単_払戻金,2連単_人気,2連複_組番,2連複_払戻金,2連複_人気,\ 16拡連複_1-2着_組番,拡連複_1-2着_払戻金,拡連複_1-2着_人気,\ 17拡連複_1-3着_組番,拡連複_1-3着_払戻金,拡連複_1-3着_人気,\ 18拡連複_2-3着_組番,拡連複_2-3着_払戻金,拡連複_2-3着_人気,\ 193連単_組番,3連単_払戻金,3連単_人気,3連複_組番,3連複_払戻金,3連複_人気,\ 201着_着順,1着_艇番,1着_登録番号,1着_選手名,1着_モーター番号,1着_ボート番号,\ 211着_展示タイム,1着_進入コース,1着_スタートタイミング,1着_レースタイム,\ 222着_着順,2着_艇番,2着_登録番号,2着_選手名,2着_モーター番号,2着_ボート番号,\ 232着_展示タイム,2着_進入コース,2着_スタートタイミング,2着_レースタイム,\ 243着_着順,3着_艇番,3着_登録番号,3着_選手名,3着_モーター番号,3着_ボート番号,\ 253着_展示タイム,3着_進入コース,3着_スタートタイミング,3着_レースタイム,\ 264着_着順,4着_艇番,4着_登録番号,4着_選手名,4着_モーター番号,4着_ボート番号,\ 274着_展示タイム,4着_進入コース,4着_スタートタイミング,4着_レースタイム,\ 285着_着順,5着_艇番,5着_登録番号,5着_選手名,5着_モーター番号,5着_ボート番号,\ 295着_展示タイム,5着_進入コース,5着_スタートタイミング,5着_レースタイム,\ 306着_着順,6着_艇番,6着_登録番号,6着_選手名,6着_モーター番号,6着_ボート番号,\ 316着_展示タイム,6着_進入コース,6着_スタートタイミング,6着_レースタイム,\n" 32 33# OSの機能を利用するパッケージ os をインポート 34import os 35 36# 正規表現をサポートするモジュール re をインポート 37import re 38 39 40# テキストファイルからデータを抽出し、CSVファイルに書き込む関数 get_data を定義 41def get_data(text_file): 42 # CSVファイルを追記モードで開く 43 csv_file = open(CSV_FILE_DIR + CSV_FILE_NAME, "a", encoding="shift_jis") 44 45 # テキストファイルから中身を順に取り出す 46 for line in text_file: 47 48 # キーワード「競争成績」を見つけたら(rは正規表現でraw文字列を指定するおまじない) 49 if re.search(r"競走成績", line): 50 # 1行スキップ 51 text_file.readline() 52 53 # タイトルを格納 54 line = text_file.readline() 55 title = line[:-1].strip() 56 57 # 1行スキップ 58 text_file.readline() 59 60 # 日次・レース日・レース場を格納 61 line = text_file.readline() 62 day = line[3:7].replace(' ', '') 63 date = line[17:27].replace(' ', '0') 64 stadium = line[62:65].replace(' ', '') 65 66 # レース回の「R」と距離の「H」を同じ行に見つけたら -> これ以降に競走成績の詳細が記載 67 if re.search(r"R", line) and re.search(r"H", line): 68 69 # レース名にキーワード「進入固定」が割り込んだ際の補正(「進入固定戦隊」は除くためHまで含めて置換) 70 if re.search(r"進入固定", line): 71 line = line.replace('進入固定 H', '進入固定 H') 72 73 # レース回、レース名、距離(m)、天候、風向、風速(m)、波の高さ(cm)を取得 74 race_round = line[2:5].replace(' ', '0') 75 race_name = line[12:31].replace(' ', '') 76 distance = line[36:40] 77 weather = line[43:45].strip() 78 wind_direction = line[50:52].strip() 79 wind_velocity = line[53:55].strip() 80 wave_height = line[60:63].strip() 81 82 # 決まり手を取得 83 line = text_file.readline() 84 winning_technique = line[50:55].strip() 85 86 # 1行スキップ 87 text_file.readline() 88 89 # 選手データを格納する変数を定義 90 result_racer = "" 91 #選手データを取り出す行(開始行)を格納 92 line = text_file.readline() 93 94 # 空行まで処理を繰り返す = 1~6艇分の選手データを取得 95 while line != "\n": 96 # 選手データを格納(行末にカンマが入らないように先頭にカンマを入れる) 97 result_racer += "," + line[2:4] + "," + line[6] + "," + line[8:12] \ 98 + "," + line[13:21] + "," + line[22:24] + "," + line[27:29] \ 99 + "," + line[30:35].strip() + "," + line[38] + "," + line[43:47] \ 100 + "," + line[52:58] 101 102 # 次の行を読み込む 103 line = text_file.readline() 104 105 # レース結果を取り出す行(開始行)を格納 106 line = text_file.readline() 107 108 # 空行まで処理を繰り返す = レース結果を取得 109 while line != "\n": 110 111 # 単勝の結果を取得 112 if re.search(r"不成立", line,): 113 continue 114 if re.search(r"単勝", line,): 115 116 117 118 # 文字列「特払い」が割り込んだ際の補正 119 if re.search(r"特払い", line): 120 line = line.replace(' 特払い ', ' 特払い ') 121 122 result_win = line[15] + "," + line[22:29].strip() 123 124 # 複勝の結果を取得 125 if re.search(r"複勝", line): 126 127 # 文字列「特払い」が割り込んだ際の補正 128 if re.search(r"特払い", line): 129 line = line.replace(' 特払い ', ' 特払い ') 130 131 # 複勝_2着のデータが存在しない場合の分岐 132 if len(line) <= 33: 133 result_place_show = line[15] + "," + line[22:29].strip() \ 134 + "," + "," 135 else: 136 137 result_place_show = line[15] + "," + line[22:29].strip() \ 138 + "," + line[31] + "," + line[38:45].strip() 139 140 # 2連単の結果を取得 141 if re.search(r"2連単", line): 142 result_exacta = line[14:17] + "," + line[21:28].strip() \ 143 + "," + line[36:38].strip() 144 145 # 2連複の結果を取得 146 if re.search(r"2連複", line): 147 result_quinella = line[14:17] + "," + line[21:28].strip() \ 148 + "," + line[36:38].strip() 149 150 # 拡連複の結果を取得 151 if re.search(r"拡連複", line): 152 # 1-2着 153 result_quinella_place = line[14:17] + "," + line[21:28].strip() \ 154 + "," + line[36:38].strip() 155 156 # 1-3着 157 line = text_file.readline() 158 result_quinella_place += "," + line[17:20] + "," + line[24:31].strip() \ 159 + "," + line[39:41].strip() 160 161 # 2-3着 162 line = text_file.readline() 163 result_quinella_place += "," + line[17:20] + "," + line[24:31].strip() \ 164 + "," + line[39:41].strip() 165 166 # 3連単の結果を取得 167 if re.search(r"3連単", line): 168 result_trifecta = line[14:19] + "," + line[21:28].strip() \ 169 + "," + line[35:38].strip() 170 171 # 3連複の結果を取得 172 if re.search(r"3連複", line): 173 result_trio = line[14:19] + "," + line[21:28].strip() \ 174 + "," + line[35:38].strip() 175 176 # 次の行を読み込む 177 line = text_file.readline() 178 179 # レースコードを生成 180 dict_stadium = {'桐生': 'KRY', '戸田': 'TDA', '江戸川': 'EDG', '平和島': 'HWJ', 181 '多摩川': 'TMG', '浜名湖': 'HMN', '蒲郡': 'GMG', '常滑': 'TKN', 182 '津': 'TSU', '三国': 'MKN', '琵琶湖': 'BWK', '住之江': 'SME', 183 '尼崎': 'AMG', '鳴門': 'NRT', '丸亀': 'MRG', '児島': 'KJM', 184 '宮島': 'MYJ', '徳山': 'TKY', '下関': 'SMS', '若松': 'WKM', 185 '芦屋': 'ASY', '福岡': 'FKO', '唐津': 'KRT', '大村': 'OMR', 'びわこ': 'BWK' 186 } 187 188 race_code = date[0:4] + date[5:7] + date[8:10] + dict_stadium[stadium] + race_round[0:2] 189 190 # 抽出したデータをCSVファイルに書き込む 191 csv_file.write(race_code + "," + title + "," + day + "," + date + "," + stadium \ 192 + "," + race_round + "," + race_name + "," + distance + "," + weather \ 193 + "," + wind_direction + "," + wind_velocity + "," + wave_height \ 194 + "," + winning_technique + "," + result_win + "," + result_place_show \ 195 + "," + result_exacta + "," + result_quinella + "," + result_quinella_place \ 196 + "," + result_trifecta + "," + result_trio + result_racer + "\n") 197 198 # CSVファイルを閉じる 199 csv_file.close() 200 201 202# 開始合図 203print("作業を開始します") 204 205# CSVファイルを格納するフォルダを作成 206os.makedirs(CSV_FILE_DIR, exist_ok=True) 207 208# CSVファイルを作成しヘッダ情報を書き込む 209csv_file = open(CSV_FILE_DIR + CSV_FILE_NAME, "w", encoding="shift_jis") 210csv_file.write(CSV_FILE_HEADER) 211csv_file.close() 212 213# テキストファイルのリストを取得 214text_file_list = os.listdir(TEXT_FILE_DIR) 215 216# リストからファイル名を順に取り出す 217for text_file_name in text_file_list: 218 219 # 拡張子が TXT のファイルに対してのみ実行 220 if re.search(".TXT", text_file_name): 221 # テキストファイルを開く 222 text_file = open(TEXT_FILE_DIR + text_file_name, "r", encoding="shift_jis") 223 224 # 関数 get_data にファイル(オブジェクト)を渡す 225 get_data(text_file) 226 227 # テキストファイルを閉じる 228 text_file.close() 229 230print(CSV_FILE_DIR + CSV_FILE_NAME + " を作成しました") 231 232# 終了合図 233print("作業を終了しました")
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/29 09:11
2021/10/29 09:24
2021/10/29 09:30
2021/10/29 10:08 編集