如何多次重命名文件(Python)

时间:2018-04-30 15:48:40

标签: python

我的困境是我想要非破坏性地编辑文件。

我的意思是:

  • 我想要使用扩展名('.bpmn')
  • 的文件
  • 将此扩展名更改为('。xml')
  • 使用Python本机库对此文件执行某些方法
  • 将文件扩展名更改回('.bpmn'),将其保留在其中 原始状态

我当前的代码相当笨拙,因为它收集了当前目录中的所有文件作为列表,

遍历包含“.bpmn”扩展名的文件并尝试重命名。但是,使用os.rename()将首先重命名该文件,然后程序将崩溃,从而导致以下错误:

FileNotFoundError: [Errno 2] No such file or directory: 'xxxxxxxx.bpmn'

但它会成功重命名该文件,但是在重新运行程序时它不会崩溃并按预期完成它的工作。我尝试使用shutil.move()作为os.rename()的替代品,但这导致了相同的问题。也许我错过了整个过程的一些细微差别?

代码:

def main():

    files = [f for f in os.listdir('.') if os.path.isfile(f)]
    for f in files:
        parseAble = False
        temp = ''
        if f.split('.')[1] == 'bpmn':
            print(f.split('.')[1])
            shutil.move(f,f.split('.')[0]+'.xml')
            print(f)
            parseAble = True
        elif f.split('.')[1] == 'xml':
            parseAble = True

        if parseAble == True:
            print(f)
            x = FileParser(f)
            x.getLaneInfo()
            x.getTaskData()
            x.sortTasks()
            x.collectUrls()
            x.outputJsonFile(x.serialize())
            shutil.move(f, f.split('.')[0]+'.bpmn')

1 个答案:

答案 0 :(得分:0)

我在您的代码中看到的问题是您使用列表中的名称重命名文件但是在重命名后您没有更新文件名值,因为您的代码仍在尝试打开{{1}并且失败,因为该文件不存在该名称并且第二次正常工作,因为该列表在第二次运行中未更改。所以对代码应该有效的简单修改如下:

.bpmn