Как записать массив в файл, а затем вызвать этот файл и добавить больше в массив?

avatar
Carter McKay
9 августа 2021 в 04:04
48
2
3

Итак, как следует из названия, я пытаюсь записать массив в файл, но затем мне нужно вспомнить этот массив и добавить к нему что-то еще, а затем записать его обратно в тот же файл, а затем тот же процесс снова и снова. снова.

На данный момент у меня есть код:

c = open(r"board.txt", "r")

current_position = []

if filesize > 4:
    current_position = [c.read()]
    print(current_position)
    stockfish.set_position(current_position)
    
else:
    stockfish.set_fen_position("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1")

#There is a lot more code here that appends stuff to the array but I don't want to #add anything that will be irrelevant to the problem

with open('board.txt', 'w') as filehandle:
    for listitem in current_position:
        filehandle.write('"%s", ' % listitem)

z = open(r"board.txt", "r")
print(z.read())    
My array end up looking like this when I read the file

""d2d4", "d7d5", ", "a2a4", "e2e4",

Весь мой код находится в этом повторе если кому нужна дополнительная информация

Источник

Ответы (2)

avatar
William Bradley
9 августа 2021 в 04:40
5

Несколько способов сделать это:

Во-первых, используйте новую строку в качестве разделителя (простой, не самый эффективный):

# write
my_array = ['d2d4', 'd7d5']
with open('board.txt', 'w+') as f:
    f.writelines([i + '\n' for i in my_array])

# read
with open('board.txt') as f:
    my_array = f.read().splitlines()

Если все строки символов имеют одинаковую длину, вам не нужен разделитель:

# write
my_array = ['d2d4', 'd7d5'] # must all be length 4 strs
with open('board.txt', 'w+') as f:
    f.writelines(my_array)

# read file, splitting string into groups of 4 characters
with open('board.txt') as f:
    in_str = f.read()

my_array = [in_str[i:i+4] for i in range(0, len(in_str), 4)]

Наконец, рассмотрим pickle, который позволяет записывать/считывать объекты Python в/из двоичных файлов:

import pickle

# write
my_array = ['d2d4', 'd7d5']
with open('board.board', 'wb+') as f: # custom file extension, can be anything
    pickle.dump(my_array, f)

# read
with open('board.board', 'rb') as f:
    my_array = pickle.load(f)
avatar
devReddit
9 августа 2021 в 04:19
2

поскольку вы повторно используете файл для добавления к нему данных, вы должны заменить:

open('board.txt', 'w')

с

open('board.txt', 'a')

a обозначает режим append. Что не перезапишет то, что у вас есть в вашем файле, оно будет добавлено к нему.