gpt4 book ai didi

python - 在我输入的某些路径中保存文件时出现问题

转载 作者:太空宇宙 更新时间:2023-11-03 20:16:11 29 4
gpt4 key购买 nike

当我在条目中引入路线时尝试自动创建文件时遇到问题。问题是,如果程序询问您在哪里保存它,它会完美地保存它,但我希望如果我在条目中指示以前的路线,我的程序首先保存文件,并且仅询问我要保存它的位置,如果我不要输入任何特定的路线(正如我所说,它做得很完美)

我是Python新手,不知道我做错了什么,不知道问题是否是我在代码中错误地链接了路径,并且它无法识别我在哪里要求保存它。当我引入 ID 和路线时,出现以下错误:

PermissionError: [Errno 13] Permission denied: 'Desktop';

当我只引入一个 ID(将路由留空)时,它会出现以下错误:

FileNotFoundError: [Errno 2] No such file or directory: ''

我想要的是,当我只输入一个 ID 时,我希望它能询问我要将该文件保存在哪里。

from tkinter import *
from tkinter import filedialog

window = Tk()
window.title("app")

idcheck = StringVar()
route = StringVar()

def function():
if route:
**idchecklist = open(route, "w")**
else:
idchecklist = filedialog.asksaveasfile(mode='w',defaultextension=".txt")
idchecklist.write(idcheck.get())
idchecklist.close()

Label(window, text="ID").grid(padx=10 ,pady=10, row=0, column=0)
Entry(window, textvariable=idcheck).grid(padx=5, row=0, column=1, sticky=E+W)
Label(window, text="Saving route").grid(padx=10 ,pady=10, row=1, column=0)
Entry(window, textvariable=route, width=50).grid(padx=5, row=1, column=1)#, sticky=E+W)
Button(window, text="Generate", command=function).grid(padx=10,pady=10,row=2,column=0,columnspan=2,sticky=E+W)

window.mainloop()

最后,有没有办法保存我引入的路由条目,以防我想多次使用该程序,而不必每次都引入该条目?这会很棒。非常感谢。

ps。抱歉,如果我犯了一些写作错误。

最佳答案

您不应在代码中使用 route,而应使用 route.get()route 在你的例子中只是一个字符串的容器,一个 StringVar 对象,所以 if 认为它是 True 。另一方面,route.get() 是一个字符串,从 Entry 中检索。因此,最终的代码可能类似于:

from tkinter import *
from tkinter import filedialog

window = Tk()
window.title("app")

idcheck = StringVar()
route = StringVar()

def function():
if route.get():
idchecklist = open(route.get(), "w")
else:
idchecklist = filedialog.asksaveasfile(mode='w',defaultextension=".txt")
idchecklist.write(idcheck.get())
idchecklist.close()

Label(window, text="ID").grid(padx=10 ,pady=10, row=0, column=0)
Entry(window, textvariable=idcheck).grid(padx=5, row=0, column=1, sticky=E+W)
Label(window, text="Saving route").grid(padx=10 ,pady=10, row=1, column=0)
Entry(window, textvariable=route, width=50).grid(padx=5, row=1, column=1)#, sticky=E+W)
Button(window, text="Generate", command=function).grid(padx=10,pady=10,row=2,column=0,columnspan=2,sticky=E+W)

window.mainloop()

如果我的理解是正确的(请参阅评论),这里有更好的版本:

from tkinter import *
from tkinter import filedialog
import os

# create window
window = Tk()
window.title("app")

# create some containers for inputs
idcheck = StringVar()
route = StringVar()

# create input entrys
Label(window, text="ID").grid(padx=10 ,pady=10, row=0, column=0)
Entry(window, textvariable=idcheck).grid(padx=5, row=0, column=1, sticky=E+W)
Label(window, text="Saving route").grid(padx=10 ,pady=10, row=1, column=0)
Entry(window, textvariable=route, width=50).grid(padx=5, row=1, column=1)#, sticky=E+W)

# Update function
def function():
if route.get(): # if route is not '' then use it else ask for it
idcheckpath = route.get()
else:
idcheckpath = filedialog.askdirectory()
route.set(idcheckpath)
# create and fill the file
idchecklist = open(idcheckpath+os.sep+idcheck.get()+'.txt', 'w')
idchecklist.write(idcheck.get())
idchecklist.close()
# generate new id:
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
# get the old id and split it into a number and a string
old_id = idcheck.get()
if len(old_id) != 8:
old_id='000000AA'
letters = old_id[6:]
number = int(old_id[:6])
# check if the last letter is Z
if letters[1] == alphabet[-1]:
if letters[0] == alphabet[-1]: # if both letters are Z, update the number
letters = 'AA'
number += 1
else:
letters = alphabet[1+alphabet.find(letters[0])]+'A' # if only the last letter is Z, update both letters
else:
letters = letters[0]+alphabet[1+alphabet.find(letters[1])] # update the last letter
idcheck.set(str(number).zfill(6)+letters) # save a new id

Button(window, text="Generate", command=function).grid(padx=10,pady=10,row=2,column=0,columnspan=2,sticky=E+W)

window.mainloop()

关于python - 在我输入的某些路径中保存文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58430815/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com