import arcpy
import os
waveHs = os.listdir('./tifs1')
waveHs = filter(lambda waveH: waveH.endswith('.tif'), waveHs)
waveCs = os.listdir('./contours1')
waveCs = filter(lambda waveC: waveC.endswith('.shp'), waveCs)
waves = zip(waveHs, waveCs)
tifpath = r'C:\Users\user\Desktop\SeaGIS\tifs1'
shppath = r'C:\Users\user\Desktop\SeaGIS\contours1'
n = 0
mxd = arcpy.mapping.MapDocument(r'C:\Users\user\Desktop\SeaGIS\MXD\Template.mxd')
for tif, shp in waves:
print [tif, shp]
tiflay = arcpy.mapping.Layer(r'C:\Users\user\Desktop\SeaGIS\MXD\Hs.lyr')
shplay = arcpy.mapping.Layer(r'C:\Users\user\Desktop\SeaGIS\MXD\Contour.lyr')
tiflay.replaceDataSource(tifpath, 'RASTER_WORKSPACE', tif[0:-4], True)
tiflay.name = tif[0:-4]
shplay.replaceDataSource(shppath, 'SHAPEFILE_WORKSPACE', shp[0:-4], True)
# shplay.replaceDataSource(shppath, 'SHAPEFILE_WORKSPACE', shp, False)
shplay.name = shp[0:-4]
df = arcpy.mapping.ListDataFrames(mxd)[0]
arcpy.mapping.AddLayer(df, tiflay)
arcpy.mapping.AddLayer(df, shplay)
n += 1
if n == 24:
end = int(tif[0:-4])
start = end - 23 * 3600
mxdname = str(start) + '_' + str(end) + '.mxd'
mxd.saveACopy(r'C:\Users\user\Desktop\SeaGIS\MXD\{}'.format(mxdname))
print r'C:\Users\user\Desktop\SeaGIS\MXD\{} has beed created!'.format(mxdname)
del mxd
mxd = arcpy.mapping.MapDocument(r'C:\Users\user\Desktop\SeaGIS\MXD\Template.mxd')
n = 0
print 'ok!'
关键点:替换图层数据源,dataset_name 参数只需要文件名,不需要文件后缀,否则可能会报错,且工作空间路径最好写完整的绝对路径