嗨,我有很多不同的文件需要重命名为其他文件。我已经做到了这一点,但我希望它能让我有很多项要替换,以及它们相应的替换项,而不是逐个键入,运行代码,然后重新键入。我还需要重命名只改变文件的一部分,而不是全部,所以如果有一个“Cat5e_1mbend1bottom50m2 bend2top-Aqeoiu31”,它只需将其更改为“Cat5e50m1mBED_50m2mBE2U-Aqeoiu31” 运行python2.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))
像那样的?在
那真是太普通了。如果一个文件需要多次替换,那就不好了。。。在
你一定要看看regular expressions。在
如果您有需要更改和替换的模式定义,那么使用re.sub非常简单
正如Hector所指出的,完成这项任务最简单的方法是使用正则表达式。幸运的是,Python有一个优秀的正则表达式模块
re
。从本质上说,我们要查看在name_map
中指定的任何模式是否与当前正在查看的文件匹配。如果模式匹配,则只有匹配的部分是子基,然后重命名。在因此,给定一个目录
start
,其中包含以下内容:bad_name.txt
catdogcat.csv
此脚本将它们重命名为:
good_name.txt
dogdogdog.csv
这两个主要的收获应该是如何使用}方法。
re.search()
和{re.search(pattern, string)
在提供的字符串中查找模式。如果找到它,它将返回一个Match
对象,如果没有,则返回None
。这使得测试字符串中的模式变得轻而易举。一旦我们发现模式存在,下一步就是用我们的新名称替换它。输入re.sub()
方法。re.sub(pattern, replace, string)
在提供的字符串中搜索模式,然后用replace的内容替换该模式。在我强烈建议您看看the docs for the ^{} module ,因为它非常强大,可以用来解决许多问题。在
相关问题 更多 >
编程相关推荐