注意 - 這不是關于從單個 csv 檔案或 excel 檔案制作 csv 檔案,而是用于單個 python 模塊應用程式。
我正在處理一項從井字游戲中制作 csv 檔案的作業,因此我制作了一些原始 Python 模塊和主代碼,這些代碼在運行主代碼時臨時保存了結果的子資料。(A-模塊,B-主代碼)。每個資訊都臨時存盤在結構體self下的類似'self.xxx'中。無法修改原始python模塊和主代碼。
A-模塊
class TTT_Env():
def __init__(self):
self.state = [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]
self.done = False
self.turn = 'X'
self.winner = None
def print_state(self):
for row in self.state:
print(*row)
def step(self, r, c):
if r not in [0, 1, 2] or c not in [0, 1, 2]:
print('Enter the number 0~2')
elif self.state[r][c] != '_':
print('Put your mark on the blank position!')
else:
self.state[r][c] = self.turn
tmp = self.state[0] self.state[1] self.state[2]
if tmp.count('_') == 0:
self.done = True
self._winner_check()
self.turn = 'O' if self.turn == 'X' else 'X'
def reset(self):
self.state = [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]
self.done = False
self.turn = 'X'
self.winner = None
def _winner_check(self):
for row in self.state:
if ''.join(row) == self.turn * 3:
self.winner, self.done = self.turn, True
for col in zip(*self.state):
if ''.join(col) == self.turn * 3:
self.winner, self.done = self.turn, True
diag_1 = self.state[0][0] self.state[1][1] self.state[2][2]
diag_2 = self.state[0][2] self.state[1][1] self.state[2][0]
if diag_1 == self.turn * 3 or diag_2 == self.turn * 3:
self.winner, self.done = self.turn, True
B- 主代碼
from TTT_env import *
from game_logger import *
env = TTT_Env()
print("Game start")
history = []
env.print_state()
while not env.done:
action = input("Player %s, enter your index of your mark(compared by space):"%env.turn)
r, c = action.split(' ')
history.append(env.turn, int(r), int(c), env.done, env.winner)
env.step(int(r), int(c))
env.print_state()
logging(history)
if env.winner == None:
print("Draw.")
else:
print("The winner is player %s!"%env.winner)
目標就在這里;(1) 我必須制作一個 .csv 檔案,其中包含臨時存盤的 self 資料集。(雖然原始程式仍在作業)
(2) 當原始程式結束時,我需要在 csv 檔案上做一個記錄。
下面的代碼是我關于目標的原型之一,它有很多錯誤,我知道,但請教我很多。
謝謝!
uj5u.com熱心網友回復:
因此,當我得到正確答案時,我驚訝地發現根本不使用 readlines 函式,也不使用 read 或 readline 函式 - 這是答案代碼
import csv
import os
import datetime
def logging(history):
if not os.path.isdir("log"):
os.mkdir("log")
if not os.path.exists("log/play_log.csv"):
with open("log/play_log.csv", "w") as f:
writer = csv.writer(f, delimiter=',', quotechar='"')
header = ["step", "player", "row", "column", "done", "winner"]
writer.writerow(header)
with open("log/play_log.csv", "a") as f:
writer = csv.writer(f, delimiter=',', quotechar='"')
for i, p_r_c_d_w in enumerate(history):
s_p_r_c_d_w = [i 1] p_r_c_d_w
writer.writerow(s_p_r_c_d_w)
writer.writerow([str(datetime.datetime.now())])
首先,我必須通過檢查 os.path.isdir 陳述句來創建路徑目錄。如果沒有說明目錄,則必須使用 os.mkdir 陳述句創建一個。
然后,使用子 .csv 檔案“play_log.csv”,我當然必須制作定界符和quotechar - 制作一個標題來比較哪個是之后的進展資料集。我也必須把它寫在 .csv 檔案上。
這段代碼的最后一部分表示我們應該為歷史日志的資料集騰出空間 - 通過將歷史資料分發到 p_r_c_d_w,并且還通過使 step(i) 在代碼運行時手動添加 1 來比較最新記錄在職的。
對于數字 2,我們應該做一個 writerow 宣告。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372809.html
