
本人 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 不会中断但相应的多新建了一个没用的文件夹。。
第一次发帖不懂,代码也很渣,还望各位多指点
1 zmrenwu 2016-12-02 17:22:02 +08:00 把 for loop 从 try 代码块中移出, try 只包含 os.mkdir(os.path.join(test,get_num(a))) 这一句 |