首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于不同变体的父folder...but重命名文件

基于不同变体的父folder...but重命名文件
EN

Stack Overflow用户
提问于 2017-04-24 20:17:43
回答 2查看 650关注 0票数 0

我对python和堆栈溢出非常陌生,但到目前为止,我喜欢用它来完成日常工作中的小任务!

我刚被安排到一个项目中,我们必须将一组文件与公司的标准相匹配--基本上是重新命名文件以符合公司的命名名称。

当前文件夹结构如下:

  • 施工图文件夹
    • M001 -人民大会堂
      • 人民大会堂-1_Final.vsd
      • 人民大会堂决赛-2.
      • 人民大会堂-3_Final.vsd

我需要把它们改成:

  • 施工图文件夹
    • M001 -人民大会堂
      • M001_人民大会堂决赛-1.vsd
      • M001_人民大会堂决赛-2.M001
      • M001_人民大会堂决赛-3.vsd

如您所见,我们拥有的当前文件可能有"-1_Final.vsd“,还有一些文件可能有”_fine-2.vsd“。有大约400个"M001 -人民大会堂“文件夹与不同的"M”号码和名称。有些文件夹可能只有一个文件,有些文件夹可能有10个文件!

我尝试过很多方法来做这件事(并且在这个网站上读到了类似的问题),但是我只有一个月的时间去学习巨蟒,所以这将是我迄今为止不得不做的最复杂的事情--所以我认为这里涉及的大部分东西都超出了我的想象!我读过一本关于python的书,它为我提供了导入os和附加的基本大纲,但是我确实需要一些帮助,把这个python脚本放在一起,这样我就可以从中学习了。

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

非常感谢,戴夫

EN

回答 2

Stack Overflow用户

发布于 2017-04-24 20:31:36

我会尝试将文件名“规范化”,将它们分割成单词,然后过滤掉数字,然后将它们重新连接起来。

代码语言:javascript
运行
复制
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

现在你可以:

代码语言:javascript
运行
复制
>>> normalize_name('People Hall_2-Final.vsd')
'People_Hall_Final_2.vsd'

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

票数 0
EN

Stack Overflow用户

发布于 2017-04-24 20:37:53

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

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43597013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档