簡體   English   中英

無法讀取文件 (Python)

[英]Can't Read File (Python)

我有一個問題。 我正在嘗試創建一個文件,要求 2 個輸入,將其轉換為字典,將其添加到文件中,然后顯示它。 這是我的代碼:

addressBook = open("address.txt","w+")
addresses = {}
newName = input("Enter contact's name: ")
newAddress = input("Enter contact's address: ")
addresses[newName] = newAddress
addressBook.write(str(addresses))
print(addressBook.read())
print(addresses)
addressBook.close()

但由於某種原因,打印只打印字典“地址”而不是文件的內容(也應該是“地址”)。 它應該返回字典兩次。 一次是直接打印,一次是使用文件打印。 但是,它只打印一次。 該文件不打印,只有print(dictionary)本身。 在打印之前將addressBook.close()移到前面也無濟於事。 謝謝!

這是因為文件是以寫模式而不是讀模式打開的。 感謝@kabanus 指出!

我更正的答案在編輯后的底部:

正如預期的那樣,這適用於我機器上的 Python 3,這意味着它會打印字典兩次。

addressBook = open("address.txt","w+")
addresses = {}
newName = input("Enter contact's name: ")
newAddress = input("Enter contact's address: ")
addresses[newName] = newAddress
addressBook.write(str(addresses))
addressBook.close()

with open('address.txt', 'r') as addressBook:
    print(addressBook.read())

print(addresses)

如果您想了解更多信息,請查看open上的相應文檔: https://docs.python.org/3/library/functions.html#open

編輯:

您將一些字符寫入文件,這意味着文件指針指向字符串后面的字符。 當您想調用.read()時,它會在文件指針為空之后返回您的文本。 這可以通過使用.seek(0)將文件指針重置回開頭來解決。

addressBook = open("address.txt","w+")
addresses = {}
newName = input("Enter contact's name: ")
newAddress = input("Enter contact's address: ")
addresses[newName] = newAddress
addressBook.write(str(addresses))
addressBook.seek(0)
print(addressBook.read())
print(addresses)
addressBook.close()

嘗試使用以下內容而不是str(addresses)

addressBook.write(addresses.__str__())

或者你可以更喜歡 go 並使用json模塊:

import json
...
addressBook.write(json.dumps(addresses))

您可以讓 json 庫為您組織文件。 如果你使用 r+ 那么你可以從同一個文件中讀寫。

如果您使用 with open,則文件將在您結束縮進時自行關閉,並且為了將 json 與文件通信,您將使用 load 進行讀取並使用 dump 進行寫入:)

import json

with open("address.json","r") as addressBook:
    try:
        addresses = json.load(addressBook)
    except:
        addresses = {}
    finally:
        print(addresses)

with open("address.json","r+") as addressBook:
    newName             = input("Enter contact's name: ")
    newAddress          = input("Enter contact's address: ")
    addresses[newName]  = newAddress
    addressBook.write(json.dumps(addresses))
    addresses = json.loads(addressBook.read())
    print(addresses)

希望它有所幫助:) 祝你好運!

暫無
暫無

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

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