根据父文件夹重命名文件.但是有不同的变化



我是Python和Stackoverflow的新手

我刚刚开始一个项目,我们必须将一组文件匹配到公司的标准 - 基本上是更名文件以匹配公司的命名命名。

当前文件夹结构如下:

  • 工作图纸文件夹
    • M001-人堂
      • People Hall-1_final.vsd
      • People Hall_final-2.vsd
      • People Hall-3_final.vsd

我需要将它们更改为:

  • 工作图纸文件夹
    • M001-人堂
      • m001_people_hall_final-1.vsd
      • m001_people_hall_final-2.vsd
      • m001_people_hall_final-3.vsd

您可以看到,我们拥有的当前文件可能具有" -1_final.vsd",而其他一些文件可能具有" _final-2.vsd"。大约有400个" M001-人堂"文件夹,其中" M"数字和名称不同。有些文件夹可能只有1个文件,有些文件夹可能有10个文件!

我尝试了很多方法来完成此操作(并在此网站上阅读了类似的问题(,但是我只有一个月的时间学习Python,所以这将是我必须做的最复杂的事情远 - 所以我认为这里涉及的大多数东西都超过了我的头!我已经阅读了一本关于Python的书,该书为我提供了导入操作系统和附加的基本概述,但是我确实可以帮助将此python脚本放在一起,以便我可以从中学习。

如果有人有任何建议,我将非常感谢!

非常感谢,dave

我会尝试通过将文件名分解为单词,然后过滤数字,然后加入。

import os
import re

def cut_and_sort(name):
    # "foo_bar-3-baz" -> ["foo", "bar", "baz", "3"]
    parts = re.split(r'[s._-]', name)
    result = []
    result.extend(p for p in parts if not p.isdigit())  # words first.
    result.extend(p for p in parts if p.isdigit())  # numbers last.
    return result

def normalize_name(name):
    # cut out the.vsd part.
    name, ext = os.path.splitext(name)
    # recombine the name from parts. 
    return '_'.join(cut_and_sort(name)) + ext

现在您可以:

>>> normalize_name('People Hall_2-Final.vsd')
'People_Hall_Final_2.vsd'

我希望这对您来说是一个很好的起点。

如果9000的答案不起作用,我会尝试以下几行:

import os
directory = <<INSERT DIRECTORY PATH HERE>>
parent_directory = os.path.dirname(directory)
for filename in os.listdir(directory):
    os.rename(filename, parent_directory + '_' + filename)

相关内容

最新更新