这是我的第一个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。打败我...
答案 0 :(得分:0)
我假设d:不是CD驱动器或不可写的东西。如果是,那么你检查了文件的属性吗?它们中的任何一个只读吗?我相信,文件夹中还需要有多个文件类型才能引起这种情况。