1

このメソッドを呼び出すたびに、Pythonは私のディレクトリにフォルダを作成しています。このメソッドは、サーバーのローカルエリアへのアクセスを必要とする私のDjangoアプリケーションの1つにあります。

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呼び出されるフォルダを使用したい場合は、それを使用できます。これは私が実装しようとしている種類の機能であるため、メソッドに引数が渡されない場合に使用します(これが問題だと思います)。myOtherFoldermyFolder~/myFolder/myOtherFolder/folder=''

4

2 に答える 2

3
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の状態で発生した「is」タイプミスを削除する最大の変更(「in」を意味しましたか?)。

ただし、envarで「〜/ myFolder / otherSpecifiedByUser」ではなく「〜/myFolder」をオーバーライドする必要があるようです。

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ベースの仕様に簡単に従うことができます。

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)
于 2010-02-03T11:19:59.823 に答える
0

私はそれがあなたの最初のif節の2番目の部分に入っていると思います。ご使用の環境でこれを実行するときに、os.environのenvarとキーの値を出力できますか?それはあなたにあなたの答えを与えるはずです。os.environまた、それがサーバーが実行されている環境であり、クライアントからの何にも依存していないことに気づきましたね。

于 2010-02-03T11:14:13.240 に答える