首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从python模块代码生成csv文件?

如何从python模块代码生成csv文件?
EN

Stack Overflow用户
提问于 2021-12-01 14:07:24
回答 1查看 58关注 0票数 0

注意-这不是从单个csv文件或excel文件生成csv文件,而是针对单个python模块应用程序。

我正在做一个任务,从一个Tic-Tac-Toe游戏中生成一个csv文件,所以我制作了一些原始的Python模块和主代码,在运行主代码时,运行结果的子数据临时保存了这些子数据。(a-模块,B-主要代码)。每个信息都临时存储在结构self下的“self.xxx”中。无法修改原始python模块和主代码。

A-模块

代码语言:javascript
运行
复制
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-主要守则

代码语言:javascript
运行
复制
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文件。

下面的代码是我关于目标的原型之一,它有很多错误,我知道,但请教我很多。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-03 08:14:49

因此,当我得到正确的答案时,我惊讶地知道没有使用读行函数,也不使用读或读行函数,这是答案代码。

代码语言:javascript
运行
复制
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‘,我必须创建一个分隔符,当然,还必须创建一个标头来比较后续的数据集。我也必须把它写在.csv文件上。

这段代码的最后一部分表示我们应该为历史日志的数据集留出空间--将历史数据分发给p_r_c_d_w,并通过使步骤(I)在代码工作时手动添加1来比较最新的记录。

对于第二条,我们应该写一个写字的声明。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70185670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档