Python 27重命名多个CAD文件

时间:2014-01-28 05:01:26

标签: python file rename

我有几个(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要素类格式(不是形状文件),它们的地理数据库不喜欢 要素类名称以数字开头(因此是_前缀),也不像破折号。

2 个答案:

答案 0 :(得分:0)

以下代码应该这样做。但是请在运行前测试它,我刚刚在这里测试了正则表达式,而不是整个程序。

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)

答案 1 :(得分:0)

您不需要使用正则表达式;这是一个有效的例子:

    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)