2017-03-23 45 views
0

因此,目前我正在爲客戶編寫「成員數據庫」程序。該程序需要能夠將所有輸入的信息放入可以隨時讀取的文本文件中。目前,我正在研究一種原型類型的東西,目前這並不代表最終產品。Python程序不會寫入文本文件

import os 

def add_member(): 
    f = open("memberdatabase.txt","a+") 
    member_name = input('Input Member Name\n') 
    member_age = int(input('Input Member Age\n')) 
    member_ID = int(input('Input Member ID\n')) 
    member_job = input('Input Member Job\n') 

    dicto = {member_name:{'Age':member_age, 
          'ID':member_ID, 
          'Job':member_job}} 
    strdicto = str(dicto) 
    f.write(strdicto) 
    menu() 

def read_data(): 
    f = open("memberdatabase.txt","r") 
    contents = f.read() 
    print(contents) 
    input('Press enter to return to menu') 
    menu() 

def menu(): 
    seperator() 
    x = int(input('Enter an option\n' 
        '[1] Add a member\n' 
        '[2] Read Data\n')) 
    if x == 1: 
     add_member() 
    elif x == 2: 
     read_data() 
    else: 
     print('Not an option, retry!') 
     menu() 

menu() 

用戶完成輸入信息後,需要寫入信息並返回菜單。目前,它只是不會寫入文本文件。

+0

也許你想更精確地知道代碼的哪部分不能工作,而不是傾銷整個程序,讓我們弄明白。 – LoicM

+1

您沒有關閉該文件。在寫入文件時,只有關閉'f.close()'後,纔會保存更改。處理文件的更好方式是使用'with'。 查看文檔:https://docs.python.org/3/whatsnew/2.6.html#pep-343-the-with-statement – BoobyTrap

+0

您應該添加一個選項'[3]退出程序;-) – Boldewyn

回答

1

你從來沒有f.close()該文件。你可以使用自動關閉與with聲明:

with open('...', 'a+') as f: 
    ... 
    # f.close() is called automatically at the end of this block. 

順便說一句:有相同閱讀它:把閱讀的with open() as f塊。

+0

謝謝!我沒有意識到最終文件必須關閉才能運行。 –

0

當我在py腳本所在的文件夾中使用名爲memberdatabase.txt的文件運行代碼時,將文本保存到文件沒有問題。完成後,您必須確保關閉文件。這是它應該是什麼樣子:

f = open("memberdatabase.txt","a+") 
member_name = input('Input Member Name\n') 
member_age = int(input('Input Member Age\n')) 
member_ID = int(input('Input Member ID\n')) 
member_job = input('Input Member Job\n') 

dicto = {member_name:{'Age':member_age, 
          'ID':member_ID, 
          'Job':member_job}} 
strdicto = str(dicto) 
f.write(strdicto) 
f.close() 

這是我的輸出文件中得到增加兩個成員後:;

{'Peter': {'Age': 26, 'ID': 21, 'Job': 'Manager'}}{'Bob': {'Age': 34, 'ID': 1209, 'Job': 'Manager'}} 

我能夠關閉文件,然後再次打開文本仍然存在。希望這有助於您現在可以在代碼中實現它。

0
  • 使用當你要強迫你的程序寫入到 文件f.flush()
  • 始終使用f.close()當您完成讀取/寫入 您的文件。