IOError:[Errno 13]权限被拒绝:批量重命名脚本

时间:2013-09-06 18:07:42

标签: python windows python-2.7

这是我的第一个python脚本之一,旨在进入一个目录并将某个扩展名的所有文件重命名为同一个东西。例如,进入音乐目录并将所有专辑图片文件的名称更改为folder.jpg,以便通过foobar2000等音乐播放软件轻松识别和显示。

我目前在标题中收到错误。我试过了:

os.chmod(pathname, 0777)

os.chmod(pathname, stat.S_IWOTH)

允许其他实体编辑我正在查看的目录,但错误仍然存​​在。我不太熟悉Windows的权限系统或Python,所以这让我很神秘。知道我哪里错了吗?

#Changes file names in every subdirectory of the target directory

import os
import sys
import shutil

#Get target path
pathname = raw_input('Enter path for music directory (ex. C:\\Music): ')
try:
        os.chdir(pathname)
except:
        print('Failed. Invalid directory?')
        sys.exit()
#Get variables for renaming
fn = raw_input('Enter desired file name for all converted files: ')
ft = raw_input('Enter the file extension you want the program to look for (ex. .jpg): ')
outname = fn + ft

#Create path tree
for path, subdirs, files in os.walk (pathname):
        #Search tree for files with defined extention
        for name in files:
            if name.lower().endswith(ft):
                #Rename the files
                src = os.path.join(path, name)
                print (src)
                dst = os.path.join(path, outname)
                print dst
                shutil.move(src, dst)
print('Complete')

第二个更为温和的问题是,当我使用print语句检查正在编辑的文件时,似乎在尝试第一个.jpg之前,程序会处理并重命名一个名为d:\ test \ folder的文件.jpg不存在。这似乎成功,并且当处理现有文件时,程序在第二次循环中失败。程序运行如下:

>>> ================================ RESTART ================================
>>> 
Enter path for music directory (ex. C:\Music): d:\test
Enter desired file name for all converted files: folder
Enter the file extension you want the program to look for (ex. .jpg): .jpg
d:\test\folder.jpg
d:\test\folder.jpg
d:\test\Anathema\Alternative 4\AA.jpg
d:\test\Anathema\Alternative 4\folder.jpg

Traceback (most recent call last):
  File "D:\Documents\Programming\Python scripts\Actually useful\bulk_filename_changer.py", line 29, in <module>
    shutil.move(src, dst)
  File "C:\Python27\lib\shutil.py", line 301, in move
    copy2(src, real_dst)
  File "C:\Python27\lib\shutil.py", line 130, in copy2
    copyfile(src, dst)
  File "C:\Python27\lib\shutil.py", line 83, in copyfile
    with open(dst, 'wb') as fdst:
IOError: [Errno 13] Permission denied: 'd:\\test\\Anathema\\Alternative 4\\folder.jpg'
>>> 

故障似乎是良性的,因为它不会导致错误,但它可能与我在代码中出现的错误有关,导致我在处理第一个“真实”文件时得到的IOError。打败我...

1 个答案:

答案 0 :(得分:0)

我假设d:不是CD驱动器或不可写的东西。如果是,那么你检查了文件的属性吗?它们中的任何一个只读吗?我相信,文件夹中还需要有多个文件类型才能引起这种情况。

Check Read only Properties of files