我在Python脚本中有一个局部变量,它使用我本地C:\<User> folder
中的路径创建临时文件:
Output_Feature_Class = "C:\\Users\\<User>\\Documents\\ArcGIS\\Default.gdb\\Bnd_"
但是,我希望能够与其他人共享此脚本,并且不希望为使用它的每个人硬编码文件路径。我基本上希望它转到同一个文件夹但<insert their User Name>
示例:C:\\TBrown\\Documents\\ArcGIS\Default.gdb\\Bnd_
。我似乎无法使用
Output_Feature_Class = "..\\Documents\\ArcGIS\\Default.gdb\\Bnd_"
上班。有什么我想念的吗?
答案 0 :(得分:2)
为什么不使用getpass?
,而不是要求他们输入用户名例如获取用户名:
import getpass
a = getpass.getuser()
Output_Feature_Class = "C:\\Users\\" + a + "\\Documents\\ArcGIS\\Default.gdb\\Bnd_"
如果你在Windows上工作(这只适用于Windows),pywin模块可以找到文档的路径:
from win32com.shell import shell, shellcon
a = shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, None, 0)
Output_Feature_Class = "{}\\ArcGIS\\Default.gdb\\Bnd_".format(a)
但这不是跨平台的。感谢此解决方案的martineau,请参阅Finding the user's "My Documents" path查找文档路径。
答案 1 :(得分:2)
与@Simon相同的答案,但是使用字符串格式化来缩小它并且不会尝试将字符串连接在一起:
import getpass
Output_Feature_Class = "C:\\Users\\%s\\Documents\\ArcGIS\\Default.gdb\\Bnd_" % getpass.getuser()
正如@Matteo Italia指出的那样,Nothing不会保证用户个人资料位于c:\users
下,或者用户名称调用用户个人资料目录。所以,也许通过获取用户的主目录并从那里建立路径来解决它会更有利:
from os.path import expanduser
Output_Feature_Class = "%s\\Documents\\ArcGIS\\Default.gdb\\Bnd_" % expanduser("~")
正如@Matteo Italia再次指出的那样,可能存在Documents
目录默认位于其他位置的情况。这可能有助于找到Documents
My Documents
文件夹的路径:引用(link)
from win32com.shell import shell
df = shell.SHGetDesktopFolder()
pidl = df.ParseDisplayName(0, None, "::{450d8fba-ad25-11d0-98a8-0800361b1103}")[1]
Output_Feature_Class = "%s\\ArcGIS\\Default.gdb\\Bnd_" % shell.SHGetPathFromIDList(pidl)
答案 2 :(得分:0)
为什么不使用Windows%TEMP%环境变量,而不是将临时文件存储在您选择的可能存在或不存在的位置?如果他们没有设置%TEMP%,很多软件都无法工作。
import os
def set_temp_path(*args):
if os.name is 'nt':
temp_path = os.getenv('TEMP')
if not temp_path:
raise OSError('No %TEMP% variable is set? wow!')
script_path = os.path.join(temp_path, *args)
if not os.path.exists(script_path):
os.makedirs(script_path)
return script_path
elif os.name is 'posix':
#perform similar operation for linux or other operating systems if desired
return "linuxpath!"
else:
raise OSError('%s is not a supported platform, sorry!' % os.name)
您可以将此代码用于此脚本或任何其他脚本的任意临时文件结构:
my_temp_path = set_temp_path('ArcGIS', 'Default.gdb', 'Bnd_')
这将为您创建所有需要的目录,并返回路径以便在脚本中进一步使用。
'C:\\Users\\JSmith\\AppData\\Local\\Temp\\ArcGIS\\Default.gdb\\Bnd_'
如果您打算支持多个平台,这当然是不完整的,但这在Linux上使用全局/tmp
或/ var/temp
路径应该是直截了当的。
答案 3 :(得分:0)
要获取用户的主目录,您可以使用os.path.expanduser
获取用户的主目录。
Output_Feature_Class = os.path.join(os.path.expanduser('~'), "Documents\\ArcGIS\\Default.gdb\\Bnd_")
正如其他人所说,在您这样做之前,请考虑这是否是这些文件的最佳位置。临时文件应位于OS约定为临时文件保留的位置。