选择Python文件访问路径

4 投票
3 回答
584 浏览
提问于 2025-04-15 16:12

我这个项目的一个功能是让用户可以创建自己的小 .txt 文件,然后把它放在他们电脑的某个地方,这样我的应用程序就可以用这个文件里的内容作为某些操作的标准。

请问有没有一个固定的、通用的路径,适用于大多数操作系统?或者有没有人能给我一些建议或者指导,帮助我解决这个问题?

顺便说一下,在开发过程中,我一直使用一个固定的位置(/home/user/Desktop/folder1/),然后再指定文件名,以便完成整个路径。

3 个回答

0

对于那些喜欢复制粘贴的人来说...

import os
file_obj = open(os.path.expanduser('~/yourapp/file.txt'), 'w')

祝你好运。

3

wx.StandardPaths模块提供了一些方法,这些方法可以返回文件系统中各种标准位置。它会在Unix、Mac OS X和Windows等不同操作系统下,自动尝试做出“正确的选择”。

7

os.path.expanduser 是一个很好的起点——以 ~/ 开头的路径会被扩展为“用户的主目录”,这个主目录是根据一些合理的规则在Unix和Windows系统上计算出来的。当然,你不想把文件直接放在主目录里,而是应该放在它的一个子目录下(如果这个子目录还不存在,你需要自己创建一个),这样做是比较合理的选择。

当然,最好允许用户通过环境变量或命令行参数来覆盖这个设置,因为有些平台对应用程序应该放置这些辅助数据文件的位置有些讲究。

编辑:提问者想要一个例子:

假设我想把文件放在 ~/tempfoler/ 里,而传入的文件是 args1.txt?

我建议通过一个函数来找到确切的路径,例如:

import errno
import os

def getfilepath(filename, foldername='tempfoler', envar='MYAPPDIR'):
  # check for environmental override
  if envar is not None and envar in os.environ:
    dirpath = os.environ[envar]
  else:
    dirpath = '~/%s' % foldername
  # expand and ensure it's a directory
  expanded = os.path.expanduser(dirpath)
  if not os.path.isdir(expanded):
    if os.path.lexists(expanded):
      # we're in dire trouble: the path is a file, not a directory!
      # you could punt to some default value, but I prefer to raise
      # an exception and allow higher levels to deal with this
      raise IOError(errno.EEXISTS, "Path is a file, not a dir", expanded)
    # the following may also raise (permission issues, &c)
    os.makedirs(expanded)
  # now the directory exists, the file may or may not (doesn't matter)
  return os.path.join(expanded, filename)

这里面有一些设计选择——对于各种问题抛出异常(上层代码可以捕获这些异常并适当地处理,比如询问用户提供一个替代方案——这个低层函数无法做到这一点!),返回文件的路径,这个文件可能存在也可能不存在(因此适合读取已有文件或写入新文件),等等。

你也可以选择做更少的检查,更多地依赖自动抛出的异常来处理各种异常情况(或者反过来),我觉得这种方式找到了一个合理的平衡(当然,如果你想用不同的方法处理这些问题,也很容易调整)。但关键是要始终关注可能出错的地方,以及如何处理这些错误(通常是通过上层代码,这是询问用户提供替代方案的唯一合适时机),这样可以让你的软件更稳健。

撰写回答