免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 1422|回复: 6
收起左侧

[求助] 怎么运用Python脚本批量替换多个mxd文件中的文本?

[复制链接]

6

主题

584

铜板

3

好友

技术员

Rank: 3Rank: 3

积分
85
发表于 2023-3-6 10:02 | 显示全部楼层 |阅读模式
如题,求助,怎么运用Python脚本批量替换多个mxd文件中的文本?
好比多个mxd文件中都有个文本“2013年9月10日”,现在要改成“2012年12月10日”

113

主题

1万

铜板

174

好友

地信贵宾

Rank: 13Rank: 13Rank: 13Rank: 13

积分
39146

精华勋章宣传勋章爱心勋章组织勋章优秀斑主地信元老灌水勋章荣誉会员勋章活跃勋章官方团队地信专家组VIP勋章贡献勋章名人堂勋章成就学员勋章

发表于 2023-3-6 10:12 | 显示全部楼层
  1. import arcpy
  2. mxdList = arcpy.GetParameterAsText(0).split(";")
  3. oldText = arcpy.GetParameterAsText(1).split(";")
  4. newText = arcpy.GetParameterAsText(2).split(";")

  5. for mapDoc in mxdList:
  6.     mxd = arcpy.mapping.MapDocument(mapDoc)
  7.     for elm in arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT"):
  8.         for i in range(len(oldText)):
  9.             if elm.text == oldText[i]:
  10.                 elm.text = newText[i]
  11.     mxd.save()
  12. del mxd
复制代码

回复 支持 反对

使用道具 举报

0

主题

1647

铜板

4

好友

助理工程师

Rank: 5Rank: 5

积分
134
发表于 2023-3-6 12:58 | 显示全部楼层
import arcpy
import os

# 定义替换函数
def replace_text(mxd_path, old_text, new_text):
    mxd = arcpy.mapping.MapDocument(mxd_path)
    for elm in arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT"):
        if elm.text == old_text:
            elm.text = new_text
    mxd.save()
    del mxd

# 定义目录路径和要替换的文本
dir_path = r"C:\MXD_files"
old_text = "Old Text"
new_text = "New Text"

# 循环遍历目录下的所有mxd文件并替换文本
for filename in os.listdir(dir_path):
    if filename.endswith(".mxd"):
        mxd_path = os.path.join(dir_path, filename)
        replace_text(mxd_path, old_text, new_text)

print("文本替换完成!")
在这个代码示例中,首先定义了一个replace_text函数来替换mxd文件中的文本。然后,定义了要替换的文本和存储mxd文件的目录路径。最后,使用os模块的listdir函数循环遍历目录下的所有mxd文件,并调用replace_text函数来替换文本。

需要注意的是,这个代码示例只能替换文本元素中完全匹配的文本。如果要替换部分文本或使用正则表达式来替换文本,需要修改replace_text函数的代码。
回复 支持 反对

使用道具 举报

0

主题

2万

铜板

6

好友

资深会员

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

积分
3592
发表于 2023-3-6 15:31 | 显示全部楼层
路过支持一下
回复 支持 反对

使用道具 举报

6

主题

584

铜板

3

好友

技术员

Rank: 3Rank: 3

积分
85
 楼主| 发表于 2023-3-6 15:39 | 显示全部楼层

你好,我想问一下粘贴进去出现错误。
import arcpy
... import os
...
... # 定义替换函数
... def replace_text(mxd_path, old_text, new_text):
...     mxd = arcpy.mapping.MapDocument(mxd_path)
...     for elm in arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT"):
...         if elm.text == old_text:
...             elm.text = new_text
...     mxd.save()
...     del mxd
...
... # 定义目录路径和要替换的文本
... dir_path = r"g:\ MXD_files"
... old_text = "2022年10月"
... new_text = "2023年1月"
...
... # 循环遍历目录下的所有mxd文件并替换文本
... for filename in os.listdir(dir_path):
...     if filename.endswith(".mxd"):
...         mxd_path = os.path.join(dir_path, filename)
...         replace_text(mxd_path, old_text, new_text)
...
... print("文本替换完成!")
...
Runtime error
Traceback (most recent call last):
  File "<string>", line 19, in <module>
WindowsError: [Error 3] : 'g:\\ MXD_files\\*.*'

是什么意思呢
回复 支持 反对

使用道具 举报

6

主题

584

铜板

3

好友

技术员

Rank: 3Rank: 3

积分
85
 楼主| 发表于 2023-3-6 15:41 | 显示全部楼层

请问mxd的路径,原文字内容和替换后的文字内容是写在哪里?不懂代码。。。还请多指教
回复 支持 反对

使用道具 举报

3

主题

2805

铜板

4

好友

助理工程师

Rank: 5Rank: 5

积分
189
发表于 2023-3-20 10:44 | 显示全部楼层

请问下这个怎么用

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表