Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于将所有子目录的路径更改为相对路径的ArcGIS python代码_Python_Path_Gis_Arcgis - Fatal编程技术网

用于将所有子目录的路径更改为相对路径的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

对python非常陌生,但在大学里有一些编码经验。我正在尝试找到一种方法,将每个mxd文件中的路径从绝对更改为相对,同时准备我的GIS项目数据库,以从本地托管转换为云托管(刚刚开始在家工作)。我发现了两个我认为可能有效但无法让它们协同工作的代码片段。来自ArcGIS的代码只在一个文件夹上工作,我希望它在根目录中的每个子目录上运行。谢谢你的帮助

ArcGIS Python部分

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(文件**路径**)