[英]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)
處理棋盤/棋步時循環編寫棋步:
或者,處理附加到data
的所有移動/棋盤,然后打開 CSV 文件並寫入數據writer.writerows(data)
:
data
data
寫入所有行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.