2

私はPython(およびプログラミング全般)が初めてで、典型的なクラスのデータベース/レジスタを作成しています。ユーザーがデータベースに生徒を追加および削除できるようにしたかったので、主にリストを使用しましたが、うまくいきませんでした。

プログラムを再起動するたびに、ユーザーが変更したリストは、コードで指定したデフォルトのリストに戻ります。私はインターネットを見回して、リストを別のtxtファイルに保存しようとしました。ただし、プログラムを再起動するたびにtxtファイルもデフォルトに戻ります。リストに加えた変更を保存し、そのままにしておく方法を教えてください。これがコードです(あまり良くありません):

def menu():
    print "*****************CLASS REGISTER*****************"
    print "Press 1 See The List Of Pupils"
    print "Press 2 To Add New Pupils"
    print "Press 3 To Remove Pupils"
    print "Press 0 To Quit \n"

filename = open('pupil.txt','r')

pupil = ["James Steele", "Blain Krontick", "Leeroy Jenkins", "Tanvir Choudrey"]

def see_list(x):
    print x

def add_pupil(x):
    print "You have chosen to add a new pupil.\n"
    option = raw_input("Please type the childs name.")
    x.append(option)
    filename = open('pupil.txt','w') 
    filename.write('\n'.join(pupil)) 
    filename.close() 
    print option, "has been added to the system."
    return x

def delete_pupil(x):
    print "You have chosen to remove a pupil.\n"
    option = raw_input("Please type the childs name.")
    if option in x:
        x.remove(option)
        filename = open('pupil.txt','w') 
        filename.write('\n'.join(pupil)) 
        filename.close() 
        print option, "has been removed from the system."
    else:
        print "That person is not in the system."
    return x


one = 1
while one != 0:
    menu()
    option = input() 
    if option == 1:
        see_list(pupil)
    elif option == 2:
        add_pupil(pupil)
    elif option == 3:
        delete_pupil(pupil)
    elif option == 0:
        break
    else:
        print "That is not a valible choice."

filename = open('pupil.txt','w') 
filename.write('\n'.join(pupil)) 
filename.close() 


if option == 0:
    quit
4

3 に答える 3

4

ファイルを開くだけで、pupil.txtその内容を読み返すことはありません。次のようなものが必要です。

filename = open('pupil.txt', 'r')
contents = filename.read()
filename.close()

pupil = [name for name in contents.split('\n') if name]

また、pupil.txtファイルが存在しない場合も処理する必要があります。try..exceptこれは、IO 呼び出しの周りのブロックで行うことができます。

最後に、コメントの 1 つが上で述べたように、pickleモジュールを見てください。これにより、Python オブジェクトを Python の内部形式でファイルに格納できます (これは実際には読み取り可能ではありませんが、多くの手間を省きます)。

于 2012-05-18T19:48:08.377 に答える
1

あなたの質問とは直接関係ありませんが、これは次のとおりです。

one = 1
while one != 0:
    ...

ばかげている。あなたに必要なのは:

while True:
    ...
于 2012-05-18T19:50:22.283 に答える
0

これがデータベースの目的です。使用- ライブラリが python にバンドルされてsqliteいる単純なファイルベースのデータベース。

于 2012-05-18T19:53:10.433 に答える