我的项目的一个功能是允许用户创建自己的小.txt文件,将其放在硬盘上的某个位置,然后可以将其用作我的应用程序的一部分标准.
对于我可以使用的大多数操作系统,是否有固定的"通用"(?)路径?或者有没有人有任何可以帮助我的建议或指导?
仅供参考,在开发过程中,我一直在使用固定位置(/ home/user/Desktop/folder1 /"),然后我指定文件名,以便完成路径.
os.path.expanduser是一个良好的开端 - 领先的~/扩展到"用户的主目录",这是Unix-y和Windows系统上合理的启发式计算机.当然,您不希望直接将文件放在主目录中,但是它的子目录(如果不存在则必须进行)是合理的默认值.
当然,这样做让此设置由环境变量或传递给你的程序的命令行标志覆盖,因为有些平台是相当挑剔哪里的应用程序应该,按照惯例,停车辅助等数据文件.
编辑:OP请求一个例子:
假设我想在〜/ 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)
Run Code Online (Sandbox Code Playgroud)
这里嵌入了一些设计选择 - 为各种问题引发异常(更高级别可以捕获它们并适当地处理它们,例如要求用户提供替代方案 - 这个较低级别的功能无法正确执行!),返回文件的路径可能存在也可能不存在(因此适合于读取现有文件或编写新文件),等等.
你也可以选择做更少的检查,更多地依赖于针对各种异常情况引发的自动异常(反之亦然),我只是认为这种情况达到了合理的平衡(当然,如果你愿意的话,你很容易调整一下这种问题有点不同的方法).但关键的想法是始终关注可能出错的问题以及如何处理(通常通过更高级别的代码,可能要求用户选择替代方案的唯一适当点)来使您的软件健壮.
| 归档时间: |
|
| 查看次数: |
340 次 |
| 最近记录: |