Python改变文件名的一部分

时间:2017-01-25 22:18:44

标签: python recursion

您好我有许多不同的文件需要重命名为其他内容。我得到了这个,但我想拥有它,以便我可以有许多项目来替换和相应的替换而不是输入每一个,运行代码然后再次重新键入它。此外,我需要重命名只更改文件的一部分而不是整个文件,所以如果有一个" 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))

3 个答案:

答案 0 :(得分:2)

正如Hector所指出的,完成此任务的最简单方法是使用正则表达式。幸运的是,Python有一个很好的正则表达式模块,叫做class Foo extends Bar { foo: number; constructor(){ this.foo = 60; } } 。基本上我们希望看看我们在re中指定的任何模式是否与我们正在查看的当前文件相匹配。如果模式匹配,则只匹配匹配的部分,然后重命名。

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.csvre.search()方法。 re.sub()在提供的字符串中查找模式。如果找到它,它将返回re.search(pattern, string)对象,如果没有,则返回Match。这使得测试字符串中的模式变得轻而易举。一旦我们发现模式存在,下一步就是用我们的新名称替换它。输入None方法。 re.sub()在提供的字符串中搜索模式,然后将该模式替换为replace的内容。

我强烈建议您查看JDialogs,因为它非常强大,可用于解决许多问题。

答案 1 :(得分:0)

你一定要关注regular expressions

如果你有一个模式定义,你需要更改和更换,使用re.sub

非常简单

答案 2 :(得分:0)

那样的东西?

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))

这是非常行人。如果应该尊重一个文件的多个替换,那就不好了......