问题描述
今天写的python脚本出现了file.read()读不到文件内容的问题,原脚本如下:
with open(path,'r') as f:zn=re.compile(r'ZN ZN')znall=zn.findall(f.read())if len(znall) == 1:list2.append(id)for i in list1:#print(f.read())if i in f.read():list3.append(id)
运行的时候,结果和我想要的结果一直不一样,看了是list3的问题,所以就加了第七行print一下f.read(),结果打出来是空的。
原因分析:
多次调用f.read(),第一次调用f.read()可以读取到内容,这时游标会移动到文章末尾,再次调用f.read()是获取不到内容的,因此打出来是空的。
解决方案:
方法1:
将f.read()赋值给变量,这里我赋值给了content,如第三行所示,下面就都用变量替换掉f.read()的写法就好了。
with open(path,'r') as f:zn=re.compile(r'ZN ZN')content=f.read()znall=zn.findall(content)if len(znall) == 1:list2.append(id)for i in list1:#print(f.read())if i in content:list3.append(id)
方法2:
查到别的博客给的办法是,用f.seek(0)将游标移动到文章开头再次调用f.read()即可获取内容,如第六行所示。
with open(path,'r') as f:zn=re.compile(r'ZN ZN')znall=zn.findall(f.read())if len(znall) == 1:list2.append(id)f.seek(0) for i in list1:#print(f.read())if i in f.read():list3.append(id)
这样在下一次调用f.read()之前用f.seek(0)调整过光标位置之后,就不会为空了。
以上两种方法均可解决f.read()为空的问题。