這是我的代碼。Python拒絕打開文件,給'unicodeescape'錯誤(與os.path.expanduser(路徑)問題)
# -*- coding: utf-8 -*-
"""
Created on Sun Jan 22 14:47:36 2017
@author: Jose Chong
"""
import json
import tkinter
master = tkinter.Tk()
master.title("To-Do List (with saving!)")
master.geometry("300x300")
masterFrame = tkinter.Frame(master)
masterFrame.pack(fill=tkinter.X)
checkboxArea = tkinter.Frame(masterFrame, height=26)
checkboxArea.pack(fill=tkinter.X)
inputStuff = tkinter.Frame(masterFrame)
checkboxList = []
with open('C:\Users\os.path.expanduser(path)\Documents\joseDzirehChongToDoList\toDoListSaveFile.json') as infile:
checkboxList = json.load(infile)
def destroyCheckbox(checkbox, row):
row.destroy()
del checkboxList [checkboxList.index(str(checkbox))]
with open('C:\Users\os.path.expanduser(path)\Documents\joseDzirehChongToDoList\toDoListSaveFile.json', 'w') as outfile:
json.dump(checkboxList, outfile)
for savedCheckbox in checkboxList:
checkboxRow = tkinter.Frame(checkboxArea)
checkboxRow.pack(fill=tkinter.X)
checkbox1 = tkinter.Checkbutton(checkboxRow, text=savedCheckbox)
checkbox1.pack(side=tkinter.LEFT)
deleteItem = tkinter.Button(checkboxRow, text="x", bg="red", fg="white",
activebackground="white", activeforeground="red",
command=lambda c=savedCheckbox, r=checkboxRow: destroyCheckbox(c, r))
deleteItem.pack(side=tkinter.RIGHT)
with open('C:\Users\os.path.expanduser(path)\Documents\joseDzirehChongToDoList\toDoListSaveFile.json', 'w') as outfile:
json.dump(checkboxList, outfile)
def drawCheckbox():
newCheckboxInput = entry.get()
def destroyCheckbox():
checkboxRow.destroy()
del checkboxList[checkboxList.index(newCheckboxInput)]
with open('C:\Users\os.path.expanduser(path)\Documents\joseDzirehChongToDoList\toDoListSaveFile.json', 'w') as outfile:
json.dump(checkboxList, outfile)
checkboxList.append(newCheckboxInput)
entry.delete(0,tkinter.END)
checkboxRow = tkinter.Frame(checkboxArea)
checkboxRow.pack(fill=tkinter.X)
checkbox1 = tkinter.Checkbutton(checkboxRow, text = checkboxList[-1])
checkbox1.pack(side=tkinter.LEFT)
deleteItem = tkinter.Button(checkboxRow, text = "x", command=lambda c=savedCheckbox, r=checkboxRow: destroyCheckbox(c, r), bg="red", fg="white", activebackground="white", activeforeground="red")
deleteItem.pack(side=tkinter.RIGHT)
with open('C:\Users\os.path.expanduser(path)\Documents\joseDzirehChongToDoList\toDoListSaveFile.json', 'w') as outfile:
json.dump(checkboxList, outfile)
def createInputStuff():
paddingFrame = tkinter.Frame(inputStuff, height=5)
paddingFrame.pack(fill=tkinter.X)
buttonDone.pack()
inputStuff.pack()
buttonAdd.pack_forget()
master.bind('<Return>', lambda event: drawCheckbox())
def removeInputStuff():
inputStuff.pack_forget()
buttonAdd.pack()
buttonDone.pack_forget()
master.unbind('<Return>')
buttonDone = tkinter.Button(inputStuff, text = "Close Input", command=removeInputStuff)
buttonAdd = tkinter.Button(masterFrame, text="Add Item", command=createInputStuff)
buttonAdd.pack()
topInput = tkinter.Frame(inputStuff)
bottomInput = tkinter.Frame(inputStuff)
topInput.pack()
bottomInput.pack()
prompt = tkinter.Label(topInput, text="What do you want your checkbox to be for?")
prompt.pack()
entry = tkinter.Entry(bottomInput, bd=3)
entry.pack(side=tkinter.LEFT)
buttonConfirm = tkinter.Button(bottomInput, text="Confirm", command=drawCheckbox)
buttonConfirm.pack(side=tkinter.LEFT)
master.mainloop()
給出的錯誤是這樣的:
runfile('C:/Users/Josalina/Desktop/Coding/Language - Python/to-do-list-to-compile/toDoList.py', wdir='C:/Users/Josalina/Desktop/Coding/Language - Python/to-do-list-to-compile')
File "C:/Users/Josalina/Desktop/Coding/Language - Python/to-do-list-to-compile/toDoList.py", line 26
with open('C:\Users\os.path.expanduser(path)\Documents\joseDzirehChongToDoList\toDoListSaveFile.json') as infile:
^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
它應該做同樣的事情,因爲這:
# -*- coding: utf-8 -*-
"""
Created on Sun Jan 22 14:47:36 2017
@author: Jose Chong
"""
import json
import tkinter
master = tkinter.Tk()
master.title("To-Do List (with saving!)")
master.geometry("300x300")
masterFrame = tkinter.Frame(master)
masterFrame.pack(fill=tkinter.X)
checkboxArea = tkinter.Frame(masterFrame, height=26)
checkboxArea.pack(fill=tkinter.X)
inputStuff = tkinter.Frame(masterFrame)
checkboxList = []
with open('toDoListSaveFile.json') as infile:
checkboxList = json.load(infile)
def destroyCheckbox(checkbox, row):
row.destroy()
del checkboxList [checkboxList.index(str(checkbox))]
with open("toDoListSaveFile.json", 'w') as outfile:
json.dump(checkboxList, outfile)
for savedCheckbox in checkboxList:
checkboxRow = tkinter.Frame(checkboxArea)
checkboxRow.pack(fill=tkinter.X)
checkbox1 = tkinter.Checkbutton(checkboxRow, text=savedCheckbox)
checkbox1.pack(side=tkinter.LEFT)
deleteItem = tkinter.Button(checkboxRow, text="x", bg="red", fg="white",
activebackground="white", activeforeground="red",
command=lambda c=savedCheckbox, r=checkboxRow: destroyCheckbox(c, r))
deleteItem.pack(side=tkinter.RIGHT)
with open("toDoListSaveFile.json", 'w') as outfile:
json.dump(checkboxList, outfile)
def drawCheckbox():
newCheckboxInput = entry.get()
def destroyCheckbox():
checkboxRow.destroy()
del checkboxList[checkboxList.index(newCheckboxInput)]
with open("toDoListSaveFile.json", 'w') as outfile:
json.dump(checkboxList, outfile)
checkboxList.append(newCheckboxInput)
entry.delete(0,tkinter.END)
checkboxRow = tkinter.Frame(checkboxArea)
checkboxRow.pack(fill=tkinter.X)
checkbox1 = tkinter.Checkbutton(checkboxRow, text = checkboxList[-1])
checkbox1.pack(side=tkinter.LEFT)
deleteItem = tkinter.Button(checkboxRow, text = "x", command=lambda c=savedCheckbox, r=checkboxRow: destroyCheckbox(c, r), bg="red", fg="white", activebackground="white", activeforeground="red")
deleteItem.pack(side=tkinter.RIGHT)
with open("toDoListSaveFile.json", 'w') as outfile:
json.dump(checkboxList, outfile)
def createInputStuff():
paddingFrame = tkinter.Frame(inputStuff, height=5)
paddingFrame.pack(fill=tkinter.X)
buttonDone.pack()
inputStuff.pack()
buttonAdd.pack_forget()
master.bind('<Return>', lambda event: drawCheckbox())
def removeInputStuff():
inputStuff.pack_forget()
buttonAdd.pack()
buttonDone.pack_forget()
master.unbind('<Return>')
buttonDone = tkinter.Button(inputStuff, text = "Close Input", command=removeInputStuff)
buttonAdd = tkinter.Button(masterFrame, text="Add Item", command=createInputStuff)
buttonAdd.pack()
topInput = tkinter.Frame(inputStuff)
bottomInput = tkinter.Frame(inputStuff)
topInput.pack()
bottomInput.pack()
prompt = tkinter.Label(topInput, text="What do you want your checkbox to be for?")
prompt.pack()
entry = tkinter.Entry(bottomInput, bd=3)
entry.pack(side=tkinter.LEFT)
buttonConfirm = tkinter.Button(bottomInput, text="Confirm", command=drawCheckbox)
buttonConfirm.pack(side=tkinter.LEFT)
master.mainloop()
只是寫在不同位置的文件。我希望它適用於每個不同的用戶,因此我用os.path.expanduser(path)
替換了我的名字,如here所示。我幾乎肯定我使用os.path.expanduser(路徑)錯誤,幫助?我應該做些什麼?
我已經在Documents \ joseDzirehChongToDoList \ toDoListSaveFile.json中創建了該文件。
的可能的複製[?爲什麼我會在我的文件路徑中的Unicode轉義一個SyntaxError(http://stackoverflow.com/問題/ 18084554/why-do-i-get -a-syntaxerror-for-a-unicode-escape-in-my-file-path) –
可能的重複[爲什麼我的文件中出現Unicode轉義的SyntaxError ?路徑(HTTP:// ST ackoverflow.com/questions/18084554/why-do-i-get-a-syntaxerror-for-a-unicode-escape-in-my-file-path) –
您正在使用擴展名方法錯誤。其實,你根本沒有使用這種方法。你只是想給一個名爲'os.path.expanduser(path)'的路徑(作爲文字字符串,而不是方法調用) – Lafexlos