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

时间:2017-04-24 20:17:43

标签: python

我对python和stackoverflow非常陌生,但到目前为止我喜欢这种方式,可以将它用于工作中的小型日常任务!

我刚刚参与了一个项目,我们必须将一组文件与公司的标准相匹配 - 基本上重命名文件以匹配公司的命名术语。

当前文件夹结构如下:

  • 工作图纸文件夹
    • M001 - 人民大会堂
      • People Hall-1_Final.vsd
      • 人民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 - People Hall”文件夹,其中包含不同的“M”编号和名称。有些文件夹可能只有1个文件,有些文件夹可能有10个文件!

我已经尝试了很多方法来做这个(并阅读本网站上的类似问题)但我只有一个月的时间来学习python所以这将是我必须做的最复杂的事情 - 所以我认为这里涉及的大部分内容都是我的头脑!我已经阅读了一本关于python的书,它给了我一个导入操作系统的基本概要,并附加,但我真的可以使用一些帮助将这个python脚本放在一起,这样我就可以从中学习。

如果有人有任何建议,我会非常感激!

非常感谢, 戴夫

2 个答案:

答案 0 :(得分:0)

我会尝试通过将文件名分成单词来“规范化”文件名,然后过滤掉数字,然后重新加入。

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'

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

答案 1 :(得分:0)

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