每次调用此方法时,Python都会在目录中创建一个文件夹。该方法位于我的Django应用程序之一中,该应用程序需要访问服务器的本地区域。
def filepath(filename, foldername='', envar='MYAPPDIR'):
if envar is not None and envar is os.environ:
dirpath = os.environ[envar]
else:
dirpath = '~/myFolder/%s' % foldername
expanded = os.path.expanduser(dirpath)
if not os.path.isdir(expanded):
if os.path.lexists(expanded):
raise IOError(errno.EEXIST, "Path is a file, nor a dir", expanded)
os.makedirs(expanded)
return os.path.join(expanded, filename)
我想阻止它的发生。
请注意:用户可以指定它是否在默认目录中的另一个目录中。因此,默认文件夹为
myFolder
,但是如果用户要在myOtherFolder
(因此为myFolder
)中使用名为~/myFolder/myOtherFolder/
的文件夹,则可以使用。这是我要实现的功能,因此如果没有参数传递给方法(我认为是问题),我将使用folder=''
。 最佳答案
def filepath(filename, foldername=None, envar='MYAPPDIR'):
default = '~/myFolder'
if foldername:
default = os.path.join(default, foldername)
dirpath = os.path.expanduser(os.environ.get(envar, default))
try:
os.makedirs(dirpath)
except OSError as e:
if e.errno != errno.EEXIST:
raise
return os.path.join(dirpath, filename)
最大的更改是删除您在第一个if条件下出现的“是”错字(您是说“输入”吗?)。
但是,您似乎希望envar覆盖“〜/ myFolder”,而不是“〜/ myFolder / otherSpecifiedByUser”,从而得到:
def filepath(filename, foldername=None, envar='MYAPPDIR'):
dirpath = os.path.expanduser(os.environ.get(envar, "~/myFolder"))
if foldername:
dirpath = os.path.join(dirpath, foldername)
try:
os.makedirs(dirpath)
except OSError as e:
if e.errno != errno.EEXIST:
raise
return os.path.join(dirpath, filename)
另外,如果您要存储配置文件,那么如果真正使用的是“〜/ .myFolder”之类的内容,则可以简单地遵循XDG basedir spec:
def filepath(filename, foldername=None, envar='MYAPPDIR'):
default = os.path.join(os.environ.get("XDG_CONFIG_HOME", "~/.config"), "myFolder")
dirpath = os.path.expanduser(os.environ.get(envar, default))
if foldername:
dirpath = os.path.join(dirpath, foldername)
try:
os.makedirs(dirpath)
except OSError as e:
if e.errno != errno.EEXIST:
raise
return os.path.join(dirpath, filename)
关于python - Python在目录中创建不需要的文件夹,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2191402/