【问题标题】:Python 27 renaming multiple CAD FilesPython 27 重命名多个 CAD 文件
【发布时间】:2014-02-19 06:10:15
【问题描述】:

我有几个 (n=1,030) CAD 绘图文件 (.dwg),分布在 51 个子目录中,文件命名约定如下:

(a) 0000-0n-0n.dwg

需要改成:

(b)_0000_0n_0n.dwg

原始文件名(a)由三个字符串组成,每个字符串用破折号(-)分隔,即:

一个固定的四位数字前缀,后跟 n > 1 个字母数字,然后是另一个 n> 1 个字母数字,以 .dwg 文件扩展名结尾。

重命名的文件 (b) 应保留上述三个字符串, 但在文件名前加上下划线,并用下划线替换当前的破折号。 我的假设是脚本从所有 .dwg 文件的父目录递归地工作

我尝试过使用 os.rename() 函数,但我认为我需要将 (a) 文件放入列表中并 在可能使用 (b) 的重命名约定写入新文件之前拆分它们。

如果有人想知道这是怎么回事 - 我希望这些 CAD 文件重命名,以便它们可以进行 转换为 ESRI 要素类格式(不是形状文件),并且它们的地理数据库不喜欢 要素类名称以数字开头(因此是 _ 前缀),也不像破折号。

【问题讨论】:

    标签: python file rename


    【解决方案1】:

    下面的代码应该可以。但是请在运行前测试一下,我这里只是测试了正则表达式,而不是整个程序。

    import re
    import sys, os
    
    targetfolder = <your CAD file root folder>
    
    for root, dirs, files in os.walk(targetfolder):
        for f in files:
            if os.path.splitext(f)[1] == ".dwg":
                p = re.compile(r'(?P<prefix>\d+)-(?P<mid>\w+)-(?P<last>\w+).dwg')
                m = p.match(f)
                if m:
                    newf = '_' + m.group('prefix') + '_' + m.group('mid') + '_' + m.group('last') + '.dwg'
                    newfile = os.path.join(root, newf)
                    os.rename (os.path.join(root,f), newfile)
    

    【讨论】:

      【解决方案2】:

      你不需要使用正则表达式;这是一个工作示例:

          import sys, os
      
          top = "C:\Users\Philip\AppData\Local\Temp" # use your own top level directory
          os.chdir(top)
          for root, dirs, files in os.walk(top):
              for f in files:
                  if f.lower().endswith(".dwg"):
                      old = root + "\\" + f
                      new = root + "\\_" + f.replace("-","_")
                      os.rename(old,new)
      

      【讨论】:

      • 我在 DWG 文件的子集 (~ 30) 上运行了这两个脚本,我从两者中得到相同的错误消息,如下所示:文件“G:/gis_data/GEMS/PLANS - Site & Floor/0001 test/rename-DWG01",第 6 行,在 中,用于 os.walk(targetfolder) 中的根目录、目录和文件:文件“C:\Python27\ArcGIS10.1\lib\os.py”,第 284 行,在walk if isdir(join(top, name)): File "C:\Python27\ArcGIS10.1\lib\genericpath.py", line 41, in isdir st = os.stat(s) TypeError: must be encrypted string without NULL 字节,而不是 str 你能告诉我这是什么意思吗?看起来像一个简单的更正,但我不知道从哪里开始编辑
      • 您的输入目标文件夹必须转义或在 Windows 上使用原始字符串。比如targetfolder="C:\\YourFolder\\",上面的代码在this上是错误的,他的代码只能在Windows下运行。
      • 对该修改进行了进一步修改,但现在我得到了:文件“G:\gis_data\GEMS\PLANS - Site & Floor\0001 test\rename03.py”,第 14 行,在 os.path.rename(os.path.join(root,f), newfile) AttributeError: 'module' object has no attribute 'rename'
      • 对不起。那是我的错,应该是 os.rename 而不是 os.path.rename
      猜你喜欢
      • 2019-11-02
      • 2021-02-20
      • 2012-04-07
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多