【问题标题】:sorting error :"already exist"排序错误:“已经存在”
【发布时间】:2018-03-30 15:12:50
【问题描述】:

此代码假设您对我的桌面进行排序,路径 =/Users/nicolas/Desktop/prova/ 如果目标文件夹不存在并且程序创建它,它可以正常工作, 否则,如果已经有一个同名的文件夹,当他尝试移动文件时会出错并显示

完整输出:

.DS_Store nltks PNG 舍姆.png Schermata 2018-03-28 alle 11.07.13.png DS_Store nltks PNG PNG 回溯(最近一次通话最后): 文件“/Users/nicolas/Desktop/tts/work in progress/sorting machine.py”,第 16 行,在 shutil.move(path+names[x],path+currentexp) 文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py”,第 292 行,在移动中 引发错误,“目标路径 '%s' 已存在”% real_dst shutil.Error:目标路径“/Users/nicolas/Desktop/prova/png/Scherm.png”已经存在 iMac:w

但我没有任何带有 ds_store estension 的文件,并且“nltk”只是一个不应移动的文件夹。

程序

import os
import shutil

path = "/Users/nicolas/Desktop/prova/"
names  = os.listdir(path)
for x in range (0,len(names)):
    print names[x]
for x in range (0,len(names)):
    exp = names[x].split(".")
    currentexp = exp[-1]
    print (currentexp)
    if os.path.exists(path+currentexp):
        shutil.move(os.path.join(path, names[x]), os.path.join(path,currentexp))
    else:
        os.makedirs(path+currentexp)
        shutil.move(os.path.join(path, names[x]), os.path.join(path,currentexp))
 #   if names[x] not in os.path.exists(path+currentexp):
 #       shutil.move(path+names[x],path+curentexp)

感谢您的帮助

【问题讨论】:

  • 如果目标是现有目录,则将 src 移动到该目录中。如果目标已经存在但不是一个目录,它可能会根据 os.rename() 语义被覆盖:如果图像存在于目标目录中,shutil.move 将失败。您必须先将其删除。
  • 与排序无关。

标签: python-3.x sorting shutil


【解决方案1】:

来自documentation

如果目标是现有目录,则将 src 移动到该目录中。如果目标已经存在但不是目录,则可能会根据 os.rename() 语义被覆盖

总而言之,如果图像存在于目标目录中,并且源目录和目标目录都在同一个文件系统上,shutil.move 可以使用os.rename,而os.rename 失败,因为你不能重命名一个对象已经存在的名称。你必须先删除目标。

我会这样重写它:

target_dir = os.path.join(path,currentexp)
if not os.path.exists(target_dir):
    os.makedirs(target_dir)

try:
    os.remove(os.path.join(target_dir, names[x]))
except OSError:
    pass  # cannot remove or doesn't exist, ignore

shutil.move(os.path.join(path, names[x]), target_dir)

这个更简单的代码会在执行shutil.move 之前尝试删除目标文件。当然os.remove 可能会失败,失败被捕获,然后shutil.move 因为另一个错误而失败,但这超出了我们的范围

【讨论】:

  • ine 18 除了 OSError : ^ SyntaxError: invalid syntax
猜你喜欢
  • 2021-10-04
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 2015-11-24
  • 2020-08-21
相关资源
最近更新 更多