首页 > 其他 > 详细

Using ArcPy to determine ArcMap document version?

时间:2020-04-18 13:13:06      阅读:43      评论:0      收藏:0      [点我收藏+]

Using ArcPy to determine ArcMap document version?

?

23

I know this question is a few months old, but I‘m posting this in case it helps others. I developed this kludge to parse version numbers from MXD documents. It basically reads the first 4000 or so characters of an MXD document and searches for a version number. I tested with MXD versions 9.2, 9.3, 10.0, and 10.1.

import re

?

def getMXDVersion(mxdFile):

matchPattern = re.compile("9.2|9.3|10.0|10.1|10.2")

with open(mxdFile, ‘rb‘) as mxd:

fileContents = mxd.read().decode(‘latin1‘)[1000:4500]

removedChars = [x for x in fileContents if x not in [u‘\xff‘,u‘\x00‘,u‘\x01‘,u‘\t‘]]

joinedChars = ‘‘.join(removedChars)

regexMatch = re.findall(matchPattern, joinedChars)

if len(regexMatch) > 0:

version = regexMatch[0]

return version

else:

return ‘version could not be determined for ‘ + mxdFile

?

Here is an example of scanning a folder for mxd files and printing the version and names

import os

import glob

folder = r‘C:\Users\Administrator\Desktop\mxd_examples‘

mxdFiles = glob.glob(os.path.join(folder, ‘*.mxd‘))

for mxdFile in mxdFiles:

    fileName = os.path.basename(mxdFile)

    version = getMXDVersion(mxdFile)

    print version, fileName
					

Which returns this:

>>> 

10.0 Arch_Cape_DRG.mxd

9.2 class_exercise.mxd

9.3 colored_relief2.mxd

10.1 CountyIcons.mxd

10.0 DEM_Template.mxd

9.2 ex_2.mxd

10.0 nairobimap.mxd

10.0 slope_script_example.mxd

10.1 TrailMapTemplateBetter.mxd

10.0 Wickiup_Mountain_DEM.mxd

>>>
					

?

The function below is based on Ryan‘s idea, but is a little more direct. ArcGIS map documents are actually OLE documents, which can be parsed with the?oletools?module (available on pypi:?https://pypi.python.org/pypi/oletools). The function opens the file and reads the version string. Tested with 9.0, 9.3, 10.1 and 10.3, but should work with anything (not sure about 3.x...).

from oletools.thirdparty import olefile

?

def mxd_version(filename):

    ofile = olefile.OleFileIO(filename)

    stream = ofile.openstream(‘Version‘)

    data = stream.read().decode(‘utf-16‘)

    version = data.split(‘\x00‘)[1]

    return version

?

if __name__ == ‘__main__‘:

    import sys

    print(mxd_version(sys.argv[-1]))
					

Using ArcPy to determine ArcMap document version?

原文:https://www.cnblogs.com/xiexiaokui/p/12724896.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!