【问题标题】:Python script recursively rename all files in folder and subfoldersPython脚本递归重命名文件夹和子文件夹中的所有文件
【发布时间】:2017-01-27 01:31:04
【问题描述】:

您好,我有许多不同的文件需要重命名为其他文件。我已经做到了这一点,但我想拥有它,以便我可以替换许多项目及其相应的替换项,而不是逐个键入,运行代码然后再次重新键入。

更新* 另外我需要重命名以仅更改文件的一部分而不是全部内容,因此如果有“Cat5e_1mBend1bottom50m2mBend2top-Aqeoiu31”,它只会将其更改为“'Cat5e50m1mBED_50m2mBE2U-Aqeoiu31”

import os, glob

#searches for roots, directory and files
for root,dirs, files in os.walk(r"H:\My Documents\CrossTalk\\"):
   for f in files:
       if f == "Cat5e_1mBend1bottom50m2mBend2top":#string you want to rename
          try:
             os.rename('Cat5e_1mBend1bottom50m2mBend2top', 'Cat5e50m1mBED_50m2mBE2U'))
          except FileNotFoundError, e:
             print(str(e))

【问题讨论】:

  • 您将制作的文件名中的常见替换是什么?

标签: python recursion


【解决方案1】:

这是你想要的吗?

import os, glob
#searches for roots, directory and files
#Path
p=r"C:\\Users\\joao.limberger\\Documents\\Nova Pasta"
# rename arquivo1.txt to arquivo33.txt and arquivo2.txt to arquivo44.txt
renames={"arquivo1.txt":"arquivo33.txt","arquivo2.txt":"arquivo44.txt"}
for root,dirs,files in os.walk(p):
   for f in files:
      if f in renames.keys():#string you want to rename
         try:
            os.rename(os.path.join(root , f), os.path.join(root , renames[f]))
            print("Renaming ",f,"to",renames[f])
         except FileNotFoundError as e:
            print(str(e))

检查这是不是你想要的!!!

import os, glob
#searches for roots, directory and files
#Python 2.7
#Path 
p=r"C:\\Users\\joao.limberger\\Documents\\Nova Pasta"
#  if the substring in the key exist in filename, replace the substring 
#   from the value of the key
#   if the key is "o1" and the value is "oPrinc1" and the filename is
#  arquivo1.txt ... The filename whil be renamed to "arquivoPrinc1.txt"
renames={"o1":"oPrinc1","oldSubs":"newSubs"}
for root,dirs,files in os.walk(p):
    for f in files:
        for r in renames:
            if r in f:
                newFile = f.replace(r,renames[r],1)
                try:
                    os.rename(os.path.join(root , f), os.path.join(root , newFile))
                    print "Renaming ",f,"to",newFile
                except FileNotFoundError , e:
                    print str(e)

【讨论】:

  • if f in renames.keys() => if f in renames,更pythonic,更快。
  • 不行,它重命名了所有文件。我只想重命名文件的一部分。对不起,如果我让您感到困惑,请查看上面的更新
  • 您不想根据子字符串重命名?如果文件名包含第一个子字符串,那么用另一个替换文件名中的这个子字符串?示例:如果键为“o1”且值为“oPrinc1”且文件名为 arquivo1.txt ... 文件名将重命名为“arquivoPrinc1 .txt"
  • 嗨@VisualExstasy,你在我编辑答案后看到这个了吗?
【解决方案2】:

您需要的第一件事是dictionary 用于替换,然后对您的代码进行一些小改动:

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

在 name_map 中,key(“:”左侧的字符串)是文件系统中文件的名称,value(“:”右侧的字符串) 是您要使用的名称。

【讨论】:

  • 那行不通:你必须加入root 目录,否则rename 将失败。
  • @Jean-FrançoisFabre 嘿,你帮助我完成了我的上一个剧本,有什么建议吗?
  • @RafaelBarros 出现语法错误“ os.rename(f, name_map[f])) ^ SyntaxError: invalid syntax”
  • except FileNotFoundError, e 也应该是 except FileNotFoundError as e 以符合 python 3(否则你符合 python 2.5)。最后你还有一个括号太多。从 OP 问题复制到您的答案的所有原始错误。我正在编辑它:) 你稍后会感谢我的。现在我可以给自己投票了:)
  • @Engineer 现在应该可以了。
猜你喜欢
  • 2014-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
相关资源
最近更新 更多