我的应用程序将一些数据缓存在磁盘上。由于缓存可能很大,因此不应将其存储在网络驱动器上。它应该在应用程序的调用之间持续存在。我有一个机制让用户选择一个位置,但希望默认是合理的,并且该平台是“正确的”。
此类缓存的适当位置是什么?是否有用于确定适当位置的API?我如何从Python中调用它?
答案 0 :(得分:3)
您可以将应用程序文件放在Windows中。 This page显示一个列表(此枚举是.Net特定的,但大多数特殊文件夹在Windows上是标准的)。基本上,您需要确定每个用户是否需要缓存,仅针对本地计算机,每个应用程序或共享等等。
我对python没有多少经验,所以我不能特别帮助如何获得这些路径,但我相信这里有更多知识渊博的人可以。
答案 1 :(得分:2)
Windows应用程序存储其(永久)应用程序数据的标准位置由%APPDATA%
(当前用户)或%ALLUSERSPROFILE%
(所有用户)环境变量引用。您可以使用以下方式访问它们: (只有基本的,不是非常优雅的错误检查!):
import os
app_path = os.getenv("APPDATA") + "\\MyApplicationData"
try:
os.mkdir(app_path)
except WindowsError:
# already exists
现在您的应用程序拥有自己的目录。
答案 2 :(得分:2)
看看这里:http://en.wikipedia.org/wiki/Environment_variable#User_management_variables。用户目录下的任何内容都是好的。如果它适用于所有用户,那么它应该是:%ALLUSERSPROFILE%。如果是针对特定用户,请确保权限正确。
查看MSDN以获取有关其他Windows版本的更多信息。环境变量因系统而异。
答案 3 :(得分:1)
也许tempfile
模块提供了您所需要的功能。它使用Windows Temp目录(可能不在网络驱动器上),但您可以根据需要指定目录。此外,出于安全原因,此模块应该是正确的工具 - 如果您使用tempfile.mkstemp()
,则文件只能通过创建用户ID进行读写。
喔。我看到你刚刚编辑了你的问题,并且你需要在应用程序的调用之间保持文件持久性。然后tempfile
不是那么理想(即使您可以选择不在调用之间删除缓存)。
答案 4 :(得分:1)
wx.StandardPaths
模块包含返回文件系统中各种标准位置的方法,并透明地尝试在Unix,Mac OS X和Windows下执行“正确的操作”。
答案 5 :(得分:0)
该应用是否具有用户可以指定的任何首选项,设置或选项?如果是这样,请添加一个选项,用户可以在其中指定数据的位置,默认为当前Windows临时目录。
他们可能没有足够的空间在驱动器上有临时目录,并且需要使用不同的驱动器/目录。
答案 6 :(得分:0)
一个方便的包是 appdirs,它支持 Windows 和大多数其他操作系统。例如,为“作者”发布的“MyApp”版本1.0创建缓存目录是:
import os
from appdirs import user_cache_dir
dirname = user_cache_dir("AppName", "Author", "v1.0")
# C:\Users\username\AppData\Local\Author\AppName\Cache\v1.0
# create it, if it doesn't exist
os.makedirs(dirname, exist_ok=True)