簡體   English   中英

在 CSV 文件/國際象棋數據庫創建中創建多行

[英]Creating more than one row in a CSV file/Chess database creation

我正在嘗試創建一個數據庫來訓練基本的機器學習算法。 但是,當我運行代碼時,它只創建了兩行,但我試圖為游戲中的每個 position 創建多行,並在最后對 position 進行魚分析。 該代碼似乎正在進行三個動作,然后寫入文件或覆蓋每個動作的文件。 我不能說它是哪一個。 進一步闡述,下面的例子是我寫的代碼的output,其中number = 3: 輸出代碼給了我

但是,我正在尋找這樣的東西:

0 1 2 3 4 5 6 7 8
p p
p p
p p

這是我的代碼:

import chess
import chess.engine
import random
import numpy
import csv
from stockfish import Stockfish

header = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63]
data = []



def create_file(number):
  board = chess.Board()
  moves = 0
  turns = 0
  black_v = 0
  white_v = 0
  while moves < number:
    if chess.Board.is_game_over(board) == True:
      chess.Board.reset()
    if turns > 200:
      chess.Board.reset()
    for position in header:
      data.append(board.piece_at(position))

    with open('/content/Positions Data/position.csv', 'w', encoding='UTF8', newline='') as f:
        writer = csv.writer(f)
        header.append('sf')
        data.append((stockfish(board, 10))/100)
        writer.writerow(header)
        writer.writerow(data)
        data.clear()
        header.pop()
        turns = turns + 1
        moves = moves + 1
        random_move = random.choice(list(board.legal_moves))
        board.push(random_move)

正如 Camaendir 在評論中指出的那樣,您在每次移動迭代時都打開 output 文件。 這將打開“用於創建”的文件,該文件會覆蓋任何以前的數據。

此外,通過查看您的代碼和您正在嘗試做的事情,我看到有兩種方法可以實現您想要的,並且您同時嘗試這兩種方法,這會產生其他問題。

打開 CSV 文件進行寫入,並在使用writer.writerow(stockfish(board, 10))/100)處理棋盤/棋步時循環編寫棋步:

  1. 打開文件進行寫入
  2. 從文件創建 csv.Writer
  3. 寫你的 header
  4. 循環你的動作
    1. 處理移動/板
    2. 寫移動/板
  5. 關閉文件

或者,處理附加到data的所有移動/棋盤,然后打開 CSV 文件並寫入數據writer.writerows(data)

  1. 循環你的動作
    1. 處理移動/板
    2. append 表示data
  2. 打開文件進行寫入
  3. 從文件創建 csv.Writer
  4. 寫你的 header
  5. data寫入所有行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM