我试图递归地重命名目录中的文件,所以我编写了一个python脚本来处理重命名。所以理想情况下,脚本应该能够
Nicholass-MacBook-Air-2:RenameXtalTest nick$ ls
RM01_03_000_0213_Proj1_Clon1_RC_0000RC000870_010_171222_01_03_02_E0_00_031_001_RAI.jpg
RM01_03_000_0213_Proj1_Clon1_RC_0000RC000870_010_171222_07_07_01_E0_99_031_001_RAI.jpg
rename.py
进入
Nicholass-MacBook-Air-2:RenameXtalTest nick$ ls
RC000870-C1_02-E0_00.jpg
RC000870-G7_01-E0_99.jpg
rename.py
我可以得到重命名.py要在Python中处理单个名称,如果它看起来像这样:
#!/usr/bin/python
oldname = 'RM01_03_000_0213_Proj1_Clon1_RC_0000RC000870_010_171222_01_03_02_E0_00_031_001_RAI.jpg' #manually set an old name
rowdic = {"01" : "A", "02" : "B", "03" : "C", "04" : "D", "05" : "E", "06" : "F", "07" : "G", "08" : "H"} #dictionary to translate oldname char 59 to 61
coldic = {"01" : "1", "02" : "2", "03" : "3", "04" : "4", "05" : "5", "06" : "6", "07" : "7", "08" : "8", "09" : "9", "10" : "10", "11" : "11", "12" : "12"} #dictionary to translate oldname char 56 to 58
subwdic = {"01" : "1", "02" : "2", "03" : "3"} #dictionary to translate oldname char 62 to 64
newname = oldname[36:44]+"-"+rowdic[oldname[59:61]]+coldic[oldname[56:58]]+"_"+subwdic[oldname[62:64]]+"-"+oldname[65:70]+".jpg" #definition for how to shorten, rearrange, and swap out some parts of oldname
print newname
但是,当我试图让脚本在Unix中的多个文件上工作时,它就失败了。以下是我对上述内容的脚本尝试:
#!/usr/bin/python
import os
rowdic = {"01" : "A", "02" : "B", "03" : "C", "04" : "D", "05" : "E", "06" : "F", "07" : "G", "08" : "H"} #dictionary to translate oldname char 59 to 61
coldic = {"01" : "1", "02" : "2", "03" : "3", "04" : "4", "05" : "5", "06" : "6", "07" : "7", "08" : "8", "09" : "9", "10" : "10", "11" : "11", "12" : "12"} #dictionary to translate oldname char 56 to 58
subwdic = {"01" : "1", "02" : "2", "03" : "3"} #dictionary to translate oldname char 62 to 64
for oldname in os.listdir("."): #get list of all oldnames in current directory
newname = oldname[36:44]+"-"+rowdic[oldname[59:61]]+coldic[oldname[56:58]]+"_"+subwdic[oldname[62:64]]+"-"+oldname[65:70]+".jpg" #definition for how to shorten, rearrange, and swap out some parts of oldname
os.rename(oldname, newname) #command to change all old names to new names
下面是我尝试运行它时遇到的错误:
Nicholass-MacBook-Air-2:RenameXtalTest nick$ ./rename.py
Traceback (most recent call last):
File "./rename.py", line 7, in <module>
newname = oldname[36:44]+"-"+rowdic[oldname[59:61]]+coldic[oldname[56:58]]+"_"+subwdic[oldname[62:64]]+"-"+oldname[65:70]+".jpg"
KeyError: ''
有没有人能帮我理解错误的含义,以及我能做些什么来修复它?你知道吗
@mooiamaduck和我的评论结合在一起,给出了以下代码:
问题基本上是,您也在处理没有要重命名的特定文件名格式的文件。(例如,您的
.
、..
和rename.py
。)oldname[62:64]
然后转换为一个空字符串,然后将其用作subwdic
的键,从而生成空字符串KeyError
。你知道吗这里建议的简单修复方法是只考虑至少有70个字符的文件名。当然,一个更好的解决方案是对文件名进行适当的检查,看看它是否与您的模式匹配,但这对于您的特定用例来说很好。你知道吗
相关问题 更多 >
编程相关推荐