【问题标题】:Renaming Files That Exist With Python重命名存在于 Python 中的文件
【发布时间】:2012-04-11 14:08:07
【问题描述】:

所以我觉得我在 Google/StackOverflow 上四处寻找代码时可能使用了错误的词。

我正在构建一个脚本,该脚本(除其他外)将执行大量移动文件。

我目前有一条小线将文件名与扩展名分开,如果文件已存在于目录中,则添加文件名+(重复)+扩展名。

但是,我觉得必须有一个简单的小单线,基本上可以做到(重复)、(重复 1)、(重复 2)、(重复 3)等(基本上只是改变第二个数字如果文件与当前文件存在,则到下一个数字)。

有什么简单的解决方案我太笨了,无法弄清楚自己?

抱歉,我没有想到我当前的代码可能会帮助人们回答我的问题!

def destination(self, f): return os.path.abspath('.')+'/'+self.filename(f)+'/'+self.filename(f)+' (Duplicate)'+self.extension(f) if and os.path.isfile(os.path.abspath('.')+'/'+self.filename(f)+'/'+f) else os.path.abspath('.')+'/'+self.filename(f)+'/'+f

我使用了一种稍微改变的方法来获取文件名和扩展名(基本上只是为了解决一些 rar 部分和一些文件夹问题)。但是 'self.filename(f) 和 self.extension(f) 基本上只是 os.splittext(f)[0] 和 os.splittext(f)[1]。

【问题讨论】:

  • 您已有的不够简单的解决方案是什么?
  • @Robin Hood 文件轮换 可能是您所指的术语。在 Python 中,logging 模块用于设置文件轮换,因此由日志模块处理。我发现this 有助于设置日志记录(以及随之而来的文件轮换)配置。不确定要手动重命名(或 旋转)文件名的 one 衬垫。
  • 对不起,如果我不清楚,问题不是我的解决方案不够简单,只是我的解决方案只能处理一个重复,并且我唯一的方法是可以考虑让它做两个基本上只是添加另一个相同但带有“重复1”的代码块,并检查常规和“重复”——这将是完全荒谬的,也很长很长很快,基本上最终会受到我决定添加的数量的限制。

标签: python rename


【解决方案1】:

当然, 有一些单行代码可以做到这一点,但我想不出一个可读性很强的代码。我会去做这样的事情:

def alternative_names(filename):
    yield filename
    base, ext = os.path.splitext(filename)
    yield base + "(Duplicate)" + ext
    for i in itertools.count(1):
        yield base + "(Duplicate %i)" % i + ext

target_name = next(alt_name
                   for alt_name in alternative_names(target_name)
                   if not os.path.exists(alt_name))

(这可能基本上是您所做的,但您没有发布代码。)

【讨论】:

  • 漂亮!啊,我必须使用迭代器:)
  • @Sven Marnach 不错的代码,我唯一的问题是我不知道如何将其放入可以在其他地方调用并且具有“健全性检查”的代码中(我希望我正确使用该术语)以确保如果路径已经存在(即如果文件已经在正确的位置),则目标应该是相同的。现在这段代码看到它存在并重命名它....
猜你喜欢
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多