簡體   English   中英

如何將列表內容保存到文件?

[英]How to save contents of a list to a file?

我對自己的代碼有疑問:

def entry_book():
    book = ["autor", "ime", "godina", "ISNB", "zanr", "cena", "broj"]
    print ("Podaci za knjigu:")
    book[0] = input ("Autor: ")
    book[1] = input ("Naslov: ")
    book[2] = input ("Godina: ")
    book[3] = input ("ISNB: ")
    book[4] = input ("Zanr: ")
    book[5] = input ("Cena: ")
    book[6] = input ("Kolicina: ")
    record= "{}|{}|{}|{}|{}|{}|{}".format (book[0], book[1], book[2], book[3],
                                           book[4], book[5], book[6])

    print (book)
    print (record)
    f = open('books.txt','w')
    f.write (record)
    f.close()
    f = open("books.txt")
    x = f.read()
    f.close()
    print (x)
    record1 = record.split('|')
    print (record1)

    second_meni()

這是用於在書上存儲信息的代碼,我以后想訪問(例如在圖書館)。 但是,每次我添加/創建新書時,舊書都會被刪除。 誰能幫助我重寫代碼,以便它也可以存儲舊數據。 還是請解釋一下正確的方法是什么?

你必須用

f = open('knjige.txt', 'a')

'w'重新創建文件(因此僅將其用於新文件,否則,如果您不介意它將被覆蓋,則'a'將追加到文件中。

請參閱python打開內置函數:模式a,a +,w,w +和r +之間的區別?

還有一些不相關的建議:

  • 使用添加而不是索引,或者甚至更好:使用字典
  • 使用英文變量名/注釋。
  • 使用代碼檢查文件的讀寫是否正常,如果由於訪問限制或磁盤空間太小而無法寫入文件,該怎么辦?
  • 對輸入,書寫和打印使用不同的功能,這使得測試/維護/擴展更加容易。

我冒昧地對您的代碼進行了python化

def unos_knjiga():
    headers = ["Autor", "Naslov", "Godina", "ISNB", "Zanr", "Cena", "Kolicina"]
    print("Podaci za knjigu:")
    knjiga = [input("{}".format(obj + ': ')) for obj in headers]  # see 1
    zapis = '|'.join(knjiga)  # see 2

    print(knjiga)
    print(zapis)

    with open('knjige.txt', 'a') as f:  # see 3
        f.write(zapis + '\n')

    # i guess this is for testing?
    with open("knjige.txt", 'r') as f:
        x = f.read()
    print(x)

    # and this too?
    zapis1 = zapis.split('|')
    print(zapis1)

    # this is not mentioned anywhere
    second_meni()

1)這是一個列表理解 它通過遍歷內容創建列表。 在這種情況下,我們遍歷header列表,並使用其項來構造input語句。 提供的輸入存儲在列表中。

2) .join()方法。 它會執行您明確執行的操作。 使用迭代器之間的字符串連接迭代器中的項目。

3) with關鍵字。 管理文件,因此您不必這樣做。 除非有理由不使用它,否則請使用它。 這也是代碼真正的問題所在。 您必須使用'a'模式。 'a'用於追加'w'用於寫入。 在這種情況下,write表示刪除其中的所有內容並編寫新內容 還要注意, 'a'模式也可以創建文件,因此您無需暫時切換到'w''r'不是; 'r'用於讀取 )。

干杯!

我認為有兩種方法可以做到這一點:

第一

f = open('knjige.txt','w') 

是一段代碼,負責重寫文件中的現有數據。 python提供的將一些新數據追加到現有數據中的另一個選項是打開一個文件,以使用append'a'方法進行寫入。 因此,您可以將上述聲明替換為

f = open('knjige.txt','a')

它不會用您輸入的新數據替換文件。

第二

另一種選擇是使用讀取方法f = open('knjige.txt','r')打開文件,然后將現有數據復制到變量( variable=f.read('knjige.txt') )。 如果需要維護數據類型,還可以使用pickle模塊及其功能進行轉儲加載 現在,將新數據連接到“變量”中的值,然后再次使用write方法打開文件並將其寫回到文件中。

您打開文件的調用f = open('knjige.txt','w')將打開文件,並在文件存在的情況下將其截斷。 如果您使用附加內容的方式打開文件(例如) a則不應刪除前幾行。 有關打開文件以進行讀取/寫入的更多信息,請參見https://docs.python.org/2/library/functions.html#open

暫無
暫無

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

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