python - 如果文件夹已经存在,则不允许用户使用 os 模块创建文件夹
问题描述
我正在尝试制作一个添加课程表单,其中管理员将在文本框中写入课程名称,然后将创建该名称的文件夹。但是如果课程已经存在,那么它会发送一条错误消息,例如“课程已经存在”。这是我尝试过的
string=tk.StringVar()
label1=tk.Label(frame,text="Enter Course Name:",font=20,bg="#33BEFF")
label1.place(relx=0.25,rely=0.27)
coursetxt=ttk.Entry(frame,textvariable=string,text="")
coursetxt.place(relx=0.52,rely=0.27)
def addcourse():
name=coursetxt.get()
conn = pyodbc.connect('Driver={SQL Server};''Server=SHUMAILA\SHUM;''Database=FYP;''Trusted_Connection=yes;')
cursor=conn.cursor()
cursor.execute('insert into course(cname)values(?)',(name))
courses_f=os.chdir('G:\Shumaila\FYP\FYP\courses') #path where course folder are saved
course_folder=os.mkdir(name) #for creating course folder
if course_folder.path.exists in courses_f:
messagebox.showinfo("Message","Course is already exist")
else:
messagebox.showinfo("Message","Course is added")
course_folder=os.mkdir(name)
addbutton=tk.Button(frame,text="Add",bg='#FF6E33',command=addcourse)
addbutton['font']=myFont
addbutton.place(relx=0.40,rely=0.35,relwidth=0.20,relheight=0.10)
运行代码后,它给了我这个错误
FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'E1'
where E1 is the name of course I entered in textbox
我希望这条消息将打印在一个消息框中。
我也试试这个,但它也不起作用
if name in os.chdir('G:\Shumaila\FYP\FYP\courses'):
messagebox.showinfo("Message","Course is already exist")
else:
os.mkdir(name)
messagebox.showinfo("Message","Course is added")
解决方案
我们来谈谈os.mkdir()
。
mkdir
创建具有给定路径的目录。如果路径是相对的,它将相对于当前工作目录创建它。我会避免这种情况,并使用完整路径。
(为什么?因为当前工作目录是全局的,改变它可能会影响代码的其他部分。)
mkdir
总是返回无。
所以,当你打电话course_folder=os.mkdir(name)
时,你只是将 course_folder 设置为 None。
当您引用course_folder.path
不存在时。
我们来谈谈os.chdir()
。
chdir
更改当前工作目录。
当前工作目录仅在您使用相对路径时才相关。您可能应该只使用完整路径,并且永远不要更改它。
chdir
总是返回无。
所以当你设置courses_f=os.chdir([whatever])
你设置courses_f
为无。
同样,当您检查 if 时name in os.chdir([whatever])
,您只是在检查name in None
。
你应该如何解决它?
在调用. _ os.path.exists()
_os.mkdir()
这可能存在竞争条件(其他人可以在两次调用之间创建文件),因此更好的方法可能是尝试创建它,并在失败时捕获异常。
推荐阅读
- c# - 我可以让 ContentDialog.Async() 在 UWP 中等待另一个 ContentDialog.Async() 吗?
- javascript - 通过 Javascript/JQUERY 中的某个“提交”按钮提交表单
- java - 如何禁用多部分流式传输 apache cxf
- python - 如何将具有不同长度的行放在一个数组或python中的列表中?
- javascript - 如何在 JavaScript 中动态跟踪用户输入?
- ef-code-first - 由于 SQL 异常错误,无法将电子邮件属性保存到 sql 中:“不允许空插入”,除非属性不为空??(ORM 代码优先)
- java - 如何获取一个字符串,将所述字符串转换为二进制,然后获取每个 1 或 0 并将其作为值添加到数组中
- xamarin.forms - 如何设置绝对布局的大小?
- node.js - 当我单击测试按钮时,AWS lambda 函数触发了两次
- r - 如何在R-markdown中调整renderPrint的显示宽度