【问题标题】:Rename files, Python/Jython重命名文件,Python/Jython
【发布时间】:2010-10-13 02:55:31
【问题描述】:

我有一个充满文件的目录,其中一些文件的名称中有一个 & 符号。我想用&符号重命名所有文件,并用加号(+)替换每个&符号。我正在处理大约 10k 个文件。最好的方法是什么?

【问题讨论】:

  • 是10K文件的平面目录,还是有子目录的目录树?

标签: python file jython rename


【解决方案1】:
import glob, os
for filename in glob.glob(os.path.join(yourPath, "*&*")):
   os.rename(filename, filename.replace('&','+'))

【讨论】:

  • iglob 更适合这里
  • 冒昧地将字符串连接更改为 os.path.join() 调用,以清晰和可移植。
  • @SilentGhost -- 好点,已更新。 @unwind -- 是的,我猜我是以 UNIX 为中心的。
  • @vartec: glob.iglob 仅存在于 Jython 2.5+ 中(2.2 缺少它)。
  • @J.F.Sebastian:还原更改。我想这不会很重要,10K 个名字,最多会占用 2.5MB(更像可能是 100-200KB)。
【解决方案2】:

如果你有子目录:

import os
for dirpath, dirs, files in os.walk(your_path):
    for filename in files:
        if '&' in filename:
            os.rename(
                os.path.join(dirpath, filename),
                os.path.join(dirpath, filename.replace('&', '+'))
            )

【讨论】:

  • 在这种情况下,列表理解的意义何在?一个简单的循环就足够了。
  • 一定要有重点吗?我也可以在这里使用循环,但是之后的 if 语法似乎更好一些,你不觉得吗?
  • 10K 无理由的列表才是重点。这种格式可能会导致错误,例如,请参阅 '+')), 附近的逗号。
  • +1: for os.walk (虽然 OP 询问 single 目录,但一般来说 os.walk 是首选)。
  • 顺便说一句,jython 2.2 缺少 os.walk(但 jython 2.5 有)。
【解决方案3】:
import os
directory = '.'
for file in os.listdir(directory):
    if '&' in file :
        os.rename(file, file.replace('&', '+'))

用你自己的路径替换directory

【讨论】:

    【解决方案4】:

    使用rename:

    $ rename --find '&' --replace '+' *
    

    【讨论】:

      猜你喜欢
      • 2019-01-15
      • 1970-01-01
      • 2021-02-03
      • 2013-08-24
      • 2013-05-07
      • 2019-11-02
      • 2020-04-11
      • 2016-01-01
      • 2014-10-10
      相关资源
      最近更新 更多