用于将所有子目录的路径更改为相对路径的ArcGIS python代码
对python非常陌生,但在大学里有一些编码经验。我正在尝试找到一种方法,将每个mxd文件中的路径从绝对更改为相对,同时准备我的GIS项目数据库,以从本地托管转换为云托管(刚刚开始在家工作)。我发现了两个我认为可能有效但无法让它们协同工作的代码片段。来自ArcGIS的代码只在一个文件夹上工作,我希望它在根目录中的每个子目录上运行。谢谢你的帮助 ArcGIS Python部分用于将所有子目录的路径更改为相对路径的ArcGIS python代码,python,path,gis,arcgis,Python,Path,Gis,Arcgis,对python非常陌生,但在大学里有一些编码经验。我正在尝试找到一种方法,将每个mxd文件中的路径从绝对更改为相对,同时准备我的GIS项目数据库,以从本地托管转换为云托管(刚刚开始在家工作)。我发现了两个我认为可能有效但无法让它们协同工作的代码片段。来自ArcGIS的代码只在一个文件夹上工作,我希望它在根目录中的每个子目录上运行。谢谢你的帮助 ArcGIS Python部分 import arcpy, os #workspace to search for MXDs Workspace = r
import arcpy, os
#workspace to search for MXDs
Workspace = r"c:\Temp\MXDs"
arcpy.env.workspace = Workspace
#list map documents in folder
mxdList = arcpy.ListFiles("*.mxd")
#set relative path setting for each MXD in list.
for file in mxdList:
#set map document to change
filePath = os.path.join(Workspace, file)
mxd = arcpy.mapping.MapDocument(filePath)
#set relative paths property
mxd.relativePaths = True
#save map doucment change
mxd.save()
子目录代码
... from fnmatch import fnmatch
...
... root = 'C:\\user\projects'
... pattern = "*.mxd"
...
... for path, subdirs, files in os.walk(root):
... for name in files:
... if fnmatch(name, pattern)
... mxdList = arcpy.ListFiles
...
此任务不需要使用
fnmatch
模块。arcpy.ListFiles('*.mxd')
函数中的通配符就足够了。使用os.walk(root)
在子目录中循环,而不是在文件中循环
请尝试以下操作:
导入arcpy,操作系统
root=r'C:\user\projects'
pattern=“*.mxd”
对于os.walk(根目录)中的路径、子目录和文件:
对于子目录中的子目录:#循环遍历每个子目录
fullpath=os.path.join(路径,子目录)
打印('当前目录:{}'。格式(完整路径))
#将新工作空间设置为路径和子目录的组合
arcpy.env.workspace=完整路径
#在新工作区中搜索
mxdList=arcpy.ListFiles(模式)
对于mxdList中的文件:#为每个文件应用更改
打印('处理:{}'。格式(文件))
#设置要更改的地图文档
#这里的变量文件应该足够了
mxd=arcpy.mapping.MapDocument(文件)
#设置相对路径属性
mxd.relativePath=真
#保存地图副本更改
save()文件
这很有效,但我不得不更改一行。第18行出现运行时错误。无效的MXD文件名。所以我改变了mxd=arcpy.mapping.MapDocument(文件**路径**)