我有一个基本的Windows问题。我是Linux用户,但我负责一个需要在Windows文件系统上操作的程序。
我正在寻找一个安全、通用的高级目录列表,在这些目录中,任何Python程序都可以在任何Windows机器上创建目录和文件。
当我们尝试在底部运行代码时,将抛出以下错误消息。
PermissionError: [WinError 5] Access is denied: 'C:\Program Files\arbitrary'
引发上述错误的代码是:
import os
import platform
cwd = os.getcwd()
platform.system()
print("cwd is: ", cwd)
if platform.system() == 'Windows':
print('W!')
drive = cwd.split(':\')[0] + ':\'
print('drive is: ', drive)
newpath = drive+'Program Files\arbitrary'
print('newpath is: ', newpath)
if not os.path.exists(newpath):
os.makedirs(newpath)
显然,我们的程序没有写入Program Files
目录的权限。
但是,我们不需要要求我们的用户对任何给定的目录拥有权限,而是需要让程序指定写入一个目录,该目录保证任何可以运行该程序的用户都可以写入。
Windows上的此类目录通常由众所周知的环境变量引用。从你的问题中还不完全清楚你是想写持久数据还是临时数据,以及你是否希望一个用户写的数据被另一个用户看到和/或修改。
如果数据是临时的,则使用TEMP
环境变量引用的目录。
用户专用的数据通常会写入APPDATA
(与用户一起漫游(或LOCALAPPDATA
(机器本地(环境变量所引用的目录。
可能不太清楚用户之间共享的数据应该写在哪里。一个选项可能是PUBLIC
环境变量引用的公共用户目录中的某个位置。在那里写入的文件由最初创建它们的用户所有,但默认继承的权限允许其他交互式用户修改它们。
Windows提供了几个"特别的";存储文件的位置。
如果你需要写入文件,你通常会选择其中一个:
CSIDL_APPDATA
漫游到NT域中不同计算机的文件。适用于配置文件。也可用作%AppData%
环境变量CSIDL_LOCAL_APPDATA
从不漫游的文件。适用于缓存和其他不重要或可以自动重新生成的内容。也可用作%LocalAppData%
CSIDL_PERSONAL
文件。不要在此处存储配置文件%Public%
计算机上所有用户共享的文件夹%Temp%
临时目录。仅作为环境变量可用
有关在Python中检索这些内容的方法,请参阅此问题。