簡體   English   中英

Python 文件寫入 txt 文檔,但讀取時擦除

[英]Python file writes to txt document but erases on read

您好,我正在開發此程序以使用 api 來獲取用戶輸入的某些股票的開盤價和收盤價。 我正在使用 PySimpleGui 制作程序的 gui 部分。 我有很多文本字段,用戶可以在其中輸入股票代碼。 然后我將其保存到名為tickerList的列表中。 然后我將此列表寫入storedTickers.txt 然后我在另一個名為readTickers.py的文件中創建了函數openTickerList() 理論上我希望用戶輸入代碼然后他們可以關閉程序,當他們重新打開它時, tickerList將等於openTickerList()

我確實遇到了一些問題,當我在文本字段中輸入股票代碼並點擊“完成”時,它會將它們保存到文本文件中,但是如果我再次打開程序並單擊“x”,它會刪除 txt 文件。 它不應該,因為只有當我單擊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)

這一行:

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

每次運行時都會破壞storedTickers.txt的內容。 如果您希望數據在下次運行時保持完整,則需要進行重構,或者將'w'替換為'r+' ,這將打開文件以進行讀取和寫入,而不會破壞您的數據。

此處可寫文件 object 直到Done事件或erase()才需要,因此open(..., 'w')可以推遲到這些功能需要時。

暫無
暫無

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

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