尝试重命名现有文件时,Python引发操作系统错误

时间:2018-09-13 22:59:44

标签: python

很抱歉询问这样的基本问题,但我现在很迷茫。以下代码会随机引发os错误(无此类文件或目录),即使该文件存在也是如此。

try:
    os.rename(ruta,ruta[:-6])
except Exception as e:
    print "No pude renombrar la ruta "+ruta+" como "+ruta[:-6]
    print e

运行示例:

arivacoba@computer:~/Desarrollo/Medea$ ./nmsorter0.py 
    ---Status messages not relevant to the issue---
    ---Some status messages about the successful renaming of most directories---
No pude renombrar la ruta /home/arivacoba/Desarrollo/Organizar/Audio/Jazz diverso/2015 VA - Jazz Lounge Classics Vol.2/CD 1.AUDIO como /home/arivacoba/Desarrollo/Organizar/Audio/Jazz diverso/2015 VA - Jazz Lounge Classics Vol.2/CD 1
[Errno 2] No such file or directory
No pude renombrar la ruta /home/arivacoba/Desarrollo/Organizar/Audio/Jazz diverso/2015 VA - Jazz Lounge Classics Vol.2/CD 2.AUDIO como /home/arivacoba/Desarrollo/Organizar/Audio/Jazz diverso/2015 VA - Jazz Lounge Classics Vol.2/CD 2
[Errno 2] No such file or directory

在此示例中,我已经验证了文件的存在。更重要的是,我能够从python重命名文件:

arivacoba@computer:~/Desarrollo/Medea$ python
Python 2.7.15rc1 (default, Apr 15 2018, 21:51:34) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> ruta='/home/arivacoba/Desarrollo/Organizar/Audio/Jazz diverso/2015 VA - Jazz Lounge Classics Vol.2/CD 2.AUDIO'
>>> os.rename(ruta,ruta[:-6])
>>> os.rename('/home/arivacoba/Desarrollo/Organizar/Audio/Jazz diverso/2015 VA - Jazz Lounge Classics Vol.2/CD 1.AUDIO','/home/arivacoba/Desarrollo/Organizar/Audio/Jazz diverso/2015 VA - Jazz Lounge Classics Vol.2/CD 1')
>>>
arivacoba@computer:~/Desarrollo/Medea$ ls ../Organizar/Audio/Jazz\ diverso/2015\ VA\ -\ Jazz\ Lounge\ Classics\ Vol.2/
CD 1    CD 2     front.jpg     index.mfo
arivacoba@computer:~/Desarrollo/Medea$

如前所述,它是随机发生的;我将庞大的语料库的大部分传递给应用程序,以便对其进行处理,但是我观察到:

  1. 如果批量出现该错误,则总是会在 相同的目录。
  2. 如果在另一批中尝试了相同的错误目录,即使用其他数据集,则可能会或可能不会引发错误;最有可能会好的。
  3. 它永远不会抛出唯一的错误。如果批次出现此错误, 至少会有2个错误的目录。
  4. 它的行为将在不同平台上描述:我已经尝试过在centos 7,debian Jessie和xUbuntu 18.04上运行

我已经有一个解决方法,但是有点令我失望的是,我看不到如此简单的代码有什么问题。

解决方法

 os.system (("mv '%s' '%s'") % (ruta,ruta[:-6]))

工作正常,尽管有点慢。

更新:每次重命名后都可以插入睡眠,尽管速度很慢:S 这是整个周期的代码,我不知道是什么原因导致了...竞态条件?

for cada in _restDir:
    ruta = os.path.realpath(cada)
    ddir = 'DIR'+cada[-5:]
    ruta = ruta.replace(DIRBASE,(eval(ddir))

    try:
        os.rename(ruta,ruta[:-6])
    except Exception as e:
        print "No pude renombrar la ruta "+ruta+" como "+ruta[:-6]
        print e
    sleep (0.1)

0 个答案:

没有答案