我应该要求用户输入一个目录,如果该目录不存在,我们会告诉他们,然后为他们创建一个目录。
到目前为止,这是我的代码。无论输入路径的目录是否存在,它都以相同的方式起作用。
import pathlib
from pathlib import Path
def directory():
p = Path(input("Enter file path: "))
if p.exists:
print('Exists')
return p
else:
print('Directory does not exist. Making directory for you.')
p.mkdir()
directory()
答案 0 :(得分:1)
因为您必须调用 .exists
方法。参见:
>>> p = pathlib.Path("/Users/juan")
>>> p.exists # this just returns the method object
<bound method Path.exists of PosixPath('/Users/juan')>
>>> p.exists()
True
方法/函数对象总是评估为True
,因此您总是看到路径存在的原因。
答案 1 :(得分:0)
您使用的mkdir在pathlib
this one Packages(部分评论假设为os.mkdir
)
Path.mkdir(mode=0o777, parents=False, exist_ok=False)
创建一个新的 此给定路径的目录。如果给出了模式,则将其与 进程'umask值,用于确定文件模式和访问标志。 如果路径已存在,则会引发FileExistsError
。如果父母是真的,那么这条道路的任何失踪父母都被创建为 需要;它们是使用默认权限创建的,无需考虑 考虑模式(模仿POSIX mkdir -p命令)。
如果父母是假的(默认),则父母失踪 FileNotFoundError。
如果exist_ok为false(默认值),则会引发
FileExistsError
目标目录已存在。如果exist_ok为true,则
FileExistsError
例外将被忽略(相同 行为如POSIX mkdir -p命令),但仅限于最后一个路径 component不是现有的非目录文件。在版本3.5中更改:添加了exist_ok参数。
如果提供有效的路径,它应该可以在没有参数的情况下正常工作。
请注意,如果您想检查它是否存在,则需要调用exists()
方法 - 不要忘记()
但是,这不是一个好方法,因为其他人可以在您检查它和创建它之间的那条路径上创建目录(或文件)。这被称为竞争条件。
最好将mkdir
包裹在try/except
中,让操作系统告诉您是否存在问题。异常的可能性远远超过现有的可能性。例如
def directory():
p = Path(input("Enter file path: "))
try:
p.mkdir()
print('Directory does not exist. Making directory for you.')
except IOError as ex:
print('Couldn't create directory', ex)