基于父文件夹重命名文件…但有不同的变体

2024-06-08 13:33:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python和stackoverflow还很陌生,但到目前为止,我喜欢用它来完成日常工作的方式!在

我刚接到一个项目,在这个项目中,我们必须将一组文件与一家公司的标准相匹配-基本上是重命名文件以匹配公司的命名法。在

当前文件夹结构如下:

  • 工作图文件夹
    • M001-人民厅
      • 人民厅-1_最终.vsd在
      • 人民厅决赛-2.vsd
      • 人民厅-3_最终.vsd在

我需要把它们改成:

  • 工作图文件夹
    • M001-人民厅
      • M001人馆决赛1.vsd
      • M001?人?厅?决赛?2.vsd
      • M001?人?厅?决赛?3.vsd

如您所见,我们当前的文件可能有“-1”_最终.vsd还有一些人可能有“_Final-2.vsd”。大约有400个“M001-人民厅”文件夹,有不同的“M”编号和名称。有些文件夹可能只有1个文件,有些文件夹可能有10个文件!在

我尝试了很多方法来做到这一点(并阅读了本网站上类似的问题),但我只花了一个月的时间来学习python,所以这将是迄今为止我不得不做的最复杂的事情——所以我认为这里涉及的大部分内容都超出了我的能力范围!我读过一本关于python的书,它给了我一个导入操作系统和附加操作的基本概述,但是我确实需要一些帮助来把这个python脚本组合起来,这样我就可以从中学习了。在

如果有人有什么建议,我将不胜感激!在

非常感谢, 戴夫


Tags: 文件项目文件夹标准方式公司stackoverflow结构
2条回答

我试着将文件名“规范化”,方法是将文件名拆分成单词,然后过滤掉数字,再重新连接起来。在

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

现在您可以:

^{pr2}$

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

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

相关问题 更多 >