我目前正在学习python,并且正在尝试添加if / else语句。
例如,我有这个脚本可以将目录中的文件名更改为其他名称:
import os
#changes directory
os.chdir('/home/Documents/agreements')
for f in os.listdir('/home/rachellegarcia/Documents/agreements'):
f_name, f_ext = os.path.splitext(f)
f_patient, f_conf, f_agmt, f_email = f_name.split('_')
f_agmt_type, f_agmt_staff = f_agmt.split('-')
#sets the new name
new_name = '{}-{}{}'.format(f_agmt_staff, f_email, f_ext)
#renames the file
os.rename(f, new_name.replace('-', '@'))
我想要的是如果一个新文件被添加到目录中,那么它也会对其进行更改。
但是我认为因为没有if / else语句,所以会出现错误:
File "/home/Documents/python/renamefiles.py", line 8, in <module>
f_patient, f_conf, f_agmt, f_email = f_name.split('_')
ValueError: need more than 1 value to unpack
所以,我想知道是否可以添加类似内容;
如果设置了新名称,则跳过并继续循环。
感谢您的帮助! :)
答案 0 :(得分:1)
发生错误是因为遇到的文件不符合您期望的格式,该文件由_
分隔为四个部分。
您可以通过在所讨论的行周围使用try ... except ...
来解决此问题,如果循环不适合该格式,请continue
-循环。
for f in os.listdir('/home/rachellegarcia/Documents/agreements'):
f_name, f_ext = os.path.splitext(f)
try:
f_patient, f_conf, f_agmt, f_email = f_name.split('_')
except ValueError:
# ... it wasn't the format expected, skip it
continue
# ... it was the format expected
f_agmt_type, f_agmt_staff = f_agmt.split('-')
#sets the new name
new_name = '{}-{}{}'.format(f_agmt_staff, f_email, f_ext)
#renames the file
os.rename(f, new_name.replace('-', '@'))
从长远来看,根据描述您期望的确切格式的正则表达式检查每个文件名可能会更可靠。