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