[英]Python changing part of a file name
嗨我有许多不同的文件需要重命名为其他文件。 我得到了这个,但我想拥有它,以便我可以有许多项目来替换和相应的替换而不是输入每一个,运行代码然后再次重新键入它。 此外,我需要重命名只更改文件的一部分而不是整个文件,所以如果有“Cat5e_1mBend1bottom50m2mBend2top-Aqeoiu31”,它只会将其更改为“'Cat5e50m1mBED_50m2mBE2U-Aqeoiu31运行python 2.5
import os, glob
name_map = {
"Cat5e_1mBend1bottom50m2mBend2top": 'Cat5e50m1mBED_50m2mBE2U'
}
#searches for roots, directory and files
for root,dirs,files in os.walk(r"H:\My Documents\CrossTalk"):
for f in files:
if f in name_map:
try:
os.rename(os.path.join(root, f), os.path.join(root, name_map[f]))
except FileNotFoundError, e:
#except FileNotFoundError as e: # python 3
print(str(e))
正如Hector所指出的,完成此任务的最简单方法是使用正则表达式。 幸运的是,Python有一个很好的正则表达式模块,叫做re
。 基本上我们希望看看我们在name_map
中指定的任何模式name_map
与我们正在查看的当前文件name_map
匹配。 如果模式匹配,则只匹配匹配的部分,然后重命名。
import os, glob, re
name_map = {
"bad": "good",
"cat": "dog"
}
for root, dirs, files in os.walk(r"/Users/.../start/"):
for f in files:
for name in name_map.keys():
if re.search(name,f) != None:
new_name = re.sub(name,name_map[name],f)
try:
os.rename(os.path.join(root,f), os.path.join(root, new_name))
except OSError:
print "No such file or directory!"
因此给定一些目录以内容start
: bad_name.txt
catdogcat.csv
这将脚本重命名为: good_name.txt
dogdogdog.csv
这个的两个主要内容应该是如何使用re.search()
和re.sub()
方法。 re.search(pattern, string)
在提供的字符串中查找模式。 如果找到它,它将返回一个Match
对象,如果没有,那么它将返回None
。 这使得测试字符串中的模式变得轻而易举。 一旦我们发现模式存在,下一步就是用我们的新名称替换它。 输入re.sub()
方法。 re.sub(pattern, replace, string)
在提供的字符串中搜索模式,然后用replace的内容替换该模式。
我强烈建议您查看re
模块的文档,因为它非常强大,可以用来解决许多问题。
那样的东西?
files = ['something', 'nothing', 'no_really_not',
'something_something', 'nothing_to_replace']
name_map = {'nothing': 'something',
'something': 'nothing'}
for f in files:
for pat, rep in name_map.iteritems():
if f.find(pat) >= 0:
f_new = f.replace(pat, rep)
print('Rename {} -> {}'.format(f, f_new))
break
else:
print('Keep {}'.format(f))
这是非常行人。 如果应该尊重一个文件的多个替换,那就不好了......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.