问题:
使用py遍历某个文件下所有文件夹内的文件,这些文件有UTF-8,GBK...。
打开这些文件,检查是否含有某个字段,有的话将文件名输出到某个文本中。
with open(new_path,"r+",encoding="utf-8") as k:
clag = 0
try:
text = k.read().split('\n')
flag = ''
for g in text:
if check(g):flag = new_path
if flag and not check_head(text):
res.append(flag)
clag = 1
except:pass
图中使用 with 方法打开文件。但是可能会遇到编码问题。
如果文本使用的UTF8以外的编码,是也能够打开。但是再进行读取
k.read(),k.readlines()
的时候就会进行报错。
解决方法:
1.直接逃避。再open内添加关键字error
with open(file_name,'r',encoding='gbk',error='ignore') as f:
逃避可耻,但不一定有用。这样就能直接跳过。
2. 添加标签clag,
with open(new_path,"r+",encoding="gbk") as k:
clag = 0
try:
text = k.read().split('\n')
flag = ''
for g in text:
if check(g):flag = new_path
if flag and not check_head(text):
res.append(flag)
clag = 1
except:pass
如果读取成功,就把标签置为1,否则为0。放在try当中。
再添加一个if语句用于判断标签的值。
这样,就能够在每次读取的时候进行测试,如果读取失败就会进行下一次的读取。
当编码数多的时候,也可以把编码数全部放在一个列表内,for循环这个列表,以上代码中把encoding的值进行替换就行。