每次调用此方法时,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/

10-11 14:01