[英]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.