问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请教一个python的for loop中断问题

发布网友 发布时间:2022-05-24 14:51

我来回答

1个回答

热心网友 时间:2023-10-17 18:03

本人 py 新手,最近想写个脚本,正则匹配影片的"号码"及新建相应的规范标题文件夹如:"ABC-000"这样的(资源比较乱...),下面是其中一部分渣代码,
key_sym = re.compile(r"[a-zA-Z]{2,5}[\_\-]{1,2}\d{2,3}") #中间有符号
key_mid = re.compile(r"[a-zA-Z]{2,5}00\d{2,3}") #中间是 00
key_non = re.compile(r"[a-zA-Z]{2,5}\d{2,3}") #中间没有东西
key_low = re.compile(r"^[a-z]{2,5}") #小写开头
key_int = re.compile(r"\d{2,3}$") #数字结尾
key_upp = re.compile(r"^[A-Z]{2,5}")
def get_num(self):
if key_sym.findall(self):
flname = key_sym.findall(self)[0]
if re.match(key_low,flname):
flname = re.findall(key_low,flname)[0].upper() + '-' + re.findall(key_int,flname)[0]
elif re.match(key_upp,flname):
flname = re.findall(key_upp,flname)[0] + '-' + re.findall(key_int,flname)[0]
return flname
elif key_mid.findall(self):
flname = re.sub(r"00",'-',key_mid.findall(self)[0])
if re.match(key_low,flname):
flname = re.findall(key_low,flname)[0].upper() + '-' + re.findall(key_int,flname)[0]
return flname
elif key_non.findall(self):
str1 = key_non.findall(self)[0]
flname = re.findall(r"[a-zA-Z]{2,5}",str1)[0] + '-' + re.findall(r"[0-9]{2,3}",str1)[0]
if re.match(key_low,flname):
flname = re.findall(key_low,flname)[0].upper() + '-' + re.findall(key_int,flname)[0]
return flname
else:
with open('C:/python/Not_finish.txt','a') as f:
f.write(self + '\n')
f.close()
print(self + ' Not Format')

思路是遇到符合的影片就返回标准的名称比如:"ABC-000"这样的,不符合正则的就写入到一个 txt 文件中作为标记。
问题是每次此函数遇到不符合正则的的确会写入 txt ,但是 for loop 也因此中断了。。
test = r'N:\HBAD '
print(os.listdir(test))
try:
for a in os.listdir(test):
if not os.path.exists(os.path.join(test,get_num(a))):
os.mkdir(os.path.join(test,get_num(a))) #问题是 get_num()一遇到不符合正则的文件就会写入 txt ,然后中断递归
except Exception as e:
print(str(e))

请问应该如何修改才能达到将不符合的文件写入 txt 后, for loop 仍能保持递归?尝试过在打开文件那里 return 不符合的文件名,的确 for loop 不会中断但相应的多新建了一个没用的文件夹。。
问题出在这个代码块:
test = r'N:\HBAD '
print(os.listdir(test))
try:
for a in os.listdir(test):
if not os.path.exists(os.path.join(test,get_num(a))):
os.mkdir(os.path.join(test,get_num(a))) #问题是 get_num()一遇到不符合正则的文件就会写入 txt ,然后中断递归
except Exception as e:
print(str(e))

其中不符合正则是,会写入文件,但是:
else:
with open('C:/python/Not_finish.txt','a') as f:
f.write(self + '\n')
f.close()
print(self + ' Not Format')

此代码块没有返回值,所以导致下面一句抛出异常:
os.mkdir(os.path.join(test,get_num(a)))
# 因为get_num执行到最后没匹配,并没有返回值,则默认会返回None
# 所以变成执行-> os.mkdir(os.path.join(test,None))
# 抛出异常
"""
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
File "/usr/lib64/python2.7/posixpath.py", line 75, in join
if b.startswith('/'):
AttributeError: 'NoneType' object has no attribute 'startswith'
"""

然后被外围的try,except捕捉到,于是退出for循环。
另外因为你是初学者,给你提几点建议:
for循环是遍历不是递归
get_num函数,每次不匹配都要重新打开文件,并添加,效率低下,可以传入文件描述符f到此函数中处理即可
with open()语句,最后的f.close是多余的,因为with上下文已经帮你做好了这一切
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
现在波兰的签证率高不高 去波兰如何办签证 去波兰办签证好办理吗 波兰签证好签吗 win7 多重网络 教师资格证普通话要多少级 想考教师资格证普通话必须过几级 qq影视会员SVIP和超级影视VIP的区别在哪里? 一小撮怎么造句 盛行一时怎么造句 高分求言情小说名字 前夫纠缠不休,只因离婚后她做这些事情免费小说 为他人念三年地藏经,他人能得什么利益 问下,地藏王经,怎么能背的快那? 都说地藏王经,能使人越来越美丽 念什么经可以让容貌变的端正,柔和? 念地藏经会让我脸上的两块真皮斑消除吗? 地藏经是不是说看着地藏王菩萨像 十分钟就能好久都相貌端正 地藏经里,有没有关于改变外表的办法? 诵地藏经能变漂亮吗 哈尔滨哪里的化妆品店比较好? 润妮秀维生素c精华素 我通过别人的推荐开通了这个支付宝收款,而且还用他给我的推广码激活了,请问下有风险吗?这个具体是什么 有朋友说要用我的身份证办营业执照,再办理商家收款码给他用包括手机号有什么风险吗? 我在百度随便找了个二维码开通了支付宝商户收款,请问这样会不会有风险? 在全民K歌里用KTV录制的歌曲,自己能看到视频为什么发的朋友圈儿,朋友看不到视频,请回答。 用全民K歌 KTV录制的歌曲,自己可以看到视频发到朋友圈,朋友为什么看不到视频?请回答? 警察专业人发个KTV 唱歌的朋友圈视频有影响吗? 查普曼装甲门是怎么取下锁芯 铜镀镍后放久了会产生什么物质 电镀镍镀镍速度快慢跟什么有关 ph 比重 分别多少速度快 还有 光亮剂 蒜苗芹菜炒猪肉和苦瓜炒肉一起吃吗?? 200的墙页岩烧结砖尺寸怎么定 青岛农业银行哪些网点周六上班? 青岛市市南区云南路建设银行周六上班吗 公务员面试:组织“读一本好书”的活动,你怎么做? 工作人士如何跟公司打读书申请报告 假如你是李华,你校学生会将举办一次读书活动。请你用英语写一篇通知。 为了营造良好的文化氛围学校将举行好读书好读好书系列活动请你以文学社的名义围绕此次活动,写一段话唤 假如你校将开展“读好书,促成长”活动,请你根据这项活动的主题,向全校同学发出倡议。请参考表格内容, 我校读书协会要举办一次阅读活动,请以组织者的身份,写一份计划详细部署该项活? 为了让更多的学生养成良好的读书习惯,你校自2016年以来开展读书活动 暑假期间少年宫开展了爱名著爱阅读主题读书活动请你一起来参与请为本次活动拟 为了创建书香校园,切实引导学生多读书、乐读书、会读书、读好书,某校开展“好书伴我成长”的读书活动, Cisco AnyConnect 无法连接到Internet怎么办? ppt怎么做视频教程 科目三预约排名怎么算的 监理工作月报中,有个累计形象进度,上月形象进度,本月工程量的表格,这个怎么填 圣龙牌肾宝片每次一粒,可是有大有小的怎么吃 吃肾宝片时和白酒还是黄酒 肾宝片怎么样