Python файл записывает в текстовый документ, но стирает при чтении - PullRequest
0 голосов
/ 27 апреля 2020

Здравствуйте. Я разрабатываю эту программу, чтобы использовать API для получения цены открытия и закрытия определенных акций, которые вводит пользователь. Я делаю gui часть программы, используя PySimple Gui. У меня есть много текстовых полей, где пользователь вводит символ тикера. Затем я сохраняю это в список под названием tickerList. Затем я пишу этот список в storedTickers.txt. Затем я создал в другом файле readTickers.py функцию openTickerList(). Теоретически я хотел, чтобы пользователь вводил тикеры, чтобы он мог закрыть программу, и когда он снова откроет ее, tickerList будет равен openTickerList()

, но у меня возникают некоторые проблемы, когда я ставлю символы тикера в текстовых полях и нажав «готово», он сохраняет их в текстовом файле, но если я снова открою программу и просто нажму «х», он удалит текстовый файл. Это не должно происходить, потому что список должен обновляться только если я нажимаю Done (я установил обработчик события оператора if) Причина, по которой мне нужен человек, чтобы иметь возможность открывать и закрывать программу без ввода новых тикеров, состоит в том, что ему нужно нажать кнопку Get Stock Info (которая будет использовать сохраненные тикеры, а затем получить информацию об акциях из API)

Вот код для gui.py

import PySimpleGUI as sg
import pickle
global tickerList
global keyNames
global fileName
global openFile
global tryList
from readTickers import openTickerList


openFile = open('storedTickers.txt', 'w')
#tickerList = pickle.load(openFile)
tickerList = openTickerList() #this should get the tickers from the last time the person entered them 

def eraseFile():
    openFile.truncate(0)

keyNames = ['first entry', 'second entry', 'third entry', 'fourth entry', 'fifth entry', 'sixth entry', 'seventh entry', 'eighth entry', 
    'ninth entry', 'tenth entry', 'eleventh entry', 'twelfth entry', 'thirteenth entry', 'fourteenth entry', 'fifteenth entry',
    'sixteenth entry', 'seventeenth entry', 'eighteenth entry', 'nineteenth entry', 'twentieth entry']
sg.theme('Dark')
layout = [
    [sg.Button('Done')],
    [sg.Button('Reset All Tickers')],
    [sg.Button('Get Stock Info')],
    [sg.Text('1:'), sg.InputText(key='first entry'), sg.Text('11:'), sg.InputText(key='eleventh entry')],
    [sg.Text('2:'), sg.InputText(key='second entry'), sg.Text('12:'), sg.InputText(key='twelfth entry')],
    [sg.Text('3:'), sg.InputText(key='third entry'), sg.Text('13:'), sg.InputText(key='thirteenth entry')],
    [sg.Text('4:'), sg.InputText(key='fourth entry'), sg.Text('14:'), sg.InputText(key='fourteenth entry')],
    [sg.Text('5:'), sg.InputText(key='fifth entry'), sg.Text('15:'), sg.InputText(key='fifteenth entry')],
    [sg.Text('6:'), sg.InputText(key='sixth entry'), sg.Text('16:'), sg.InputText(key='sixteenth entry')],
    [sg.Text('7:'), sg.InputText(key='seventh entry'), sg.Text('17:'), sg.InputText(key='seventeenth entry')],
    [sg.Text('8:'), sg.InputText(key='eighth entry'), sg.Text('18:'), sg.InputText(key='eighteenth entry')],
    [sg.Text('9:'), sg.InputText(key='ninth entry'), sg.Text('19:'), sg.InputText(key='nineteenth entry')],
    [sg.Text('10:'), sg.InputText(key='tenth entry'), sg.Text('20:'), sg.InputText(key='twentieth entry')],

]
window = sg.Window("Stock Market Price Grabber", layout)

while True:
    event, values = window.read()
    if event in (None, 'Cancel'):
        break
    if event == 'Done':
        for x in range(20):
            tickerList.append(values[keyNames[x]] + '\n')
        for elements in tickerList:
            if len(tickerList[x]) < 0:
                tickerList.remove(tickerList[x])
        openFile.writelines(tickerList) 
    if event == 'Reset All Tickers':
        eraseFile()
print(tickerList)
window.close()

Вот код для readTickers.py

def openTickerList():
    openFile2 = open('storedTickers.txt', 'r')
    result = openFile2.readlines()
    return result
    #print(result)

1 Ответ

0 голосов
/ 28 апреля 2020

Эта строка:

openFile = open('storedTickers.txt', 'w')

будет забивать содержимое storedTickers.txt при каждом запуске. Если вы хотите, чтобы данные были неповрежденными для следующего запуска, потребуется рефакторинг, или замените 'w' на 'r+', что откроет файл для чтения + записи без удаления ваших данных.

Здесь доступный для записи объект файла не требуется до события Done или erase(), поэтому open(..., 'w') можно отложить до тех пор, пока он не понадобится для этих функций.

...