【问题标题】:How can I change a part of a filename with python如何使用 python 更改文件名的一部分
【发布时间】:2016-04-13 23:43:04
【问题描述】:

我是 python 的新手(和一般的编码),我一直无法在网上找到解决我的具体问题的方法。我目前正在创建一个允许用户将文件保存到网络位置的工具。该文件将有一个版本号。我想要的是在保存之前让脚本自动版本。我已经完成了脚本的其余部分,但我遇到的问题是自动版本控制。这是我目前所拥有的:

import re
import os

def main():
    wip_folder = "L:/xxx/xxx/xxx/scenes/wip/"  
    _file_list = os.listdir('%s' % wip_folder)

    if os.path.exists('%s' wip_path):
        for file in _file_list:
            versionPattern = re.compile('_v\d{3}')
            curVersions = versionPattern.findall('%s' % wip_folder)
            curVersions.sort()
            nextVersion = '_v%03d' % (int(curVersions[-1][2:]) + 1)
        return nextVersion
    else:
        nextVersion = '_v001'

    name = xxx_xxx_xx
    name += '%s' nextVersion
    name += '_xxx_wip

我应该指出 main() 将被另一个模块中的 QPushbutton 调用。此外,该 wip_path 很可能在其中包含单个文件的多个版本。所以如果wip_path中有这个文件的10个版本,这个保存应该是v011。如果这个问题没有意义,我深表歉意。任何帮助,将不胜感激。谢谢!

【问题讨论】:

  • 不完全确定您遇到了什么问题。您只是想确定如何找到过去的版本并正确命名新版本吗?
  • 基本上,是的。我需要通过 wip 文件夹找到最高版本号。然后我需要将 1 添加到该版本版本号以获取我存储在变量 nextVersion 中的字符串。然后我将其附加到最终的命名约定中。基本上,如果我的 wip 目录中有 ex_v001.doc ex_v002.doc ex_v003.doc,我希望我的下一个保存被命名为:ex_v004.doc
  • 您只需要在循环外编译一次正则表达式。顺便说一句,你的问题 does 是有道理的。但不清楚你的问题是什么。你现在的输出是多少?现在怎么不工作了?
  • 我一直在通过尝试打印名称来测试它,以确保我实际上得到了正确的命名约定,但是 pycharm 不打印任何东西

标签: python filenames filepath


【解决方案1】:

您根本不需要使用 re,编程是关于简化的,而您将其复杂化了!我选择了返回,但是这个函数中的任何东西都可以改变为你需要它专门做的任何事情!只需阅读 cmets,祝你好运!

def getVersioning(path):
    #passing path

    count = 1 #init count
    versionStr = 'wip_path_v'
    try: #in case path dosen't exist
        for i in os.listdir(path): #loop thorough files in passed dir
            if versionStr in i: #check if files contain default versioning string e.g. wip_path_V or any other (used in case other files are in the same dir)
                count += 1 #incriment count
    except:
        os.mkdir(path) #makedir if one does not exist for future use

    newName = versionStr + str(count) #new versioning file name
    return newName #return new versioning name

print getVersioning('tstFold')

【讨论】:

  • 感谢您的回复!我会尽快尝试这个解决方案。我会告诉你进展如何!
  • 很高兴能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
  • 2015-01-25
  • 2021-06-02
相关资源
最近更新 更多