文件读写和去重的问题
前言:
有时候想要将新内容去重后写入文件,发现直接用以下代码并不能有效去重,这是为什么呢?
1 | with open('poem.txt', 'a+', encoding='utf8') as fp: |
分析与解决
将以上代码改为如下形式,发现去重又好用了:
1 | with open('poem.txt', 'r', encoding='utf8') as r: |
但是这样写比较繁琐,能不能用最开始的方法,用一个with
解决呢?答案是肯定的!只需要加一个seek(0)
即可!代码如下:
1 | with open('poem.txt', 'a+', encoding='utf8') as fp: |
这是为什么呢?其实是由于读写机制的问题,当一个文件被读或者写一次后,文件中类指针的东西指向的是整个文件的末尾,再次读时从末尾开始读的话肯定是什么都读不到了,所以会出现这样的问题。加上fp.seek(0)
使得类指针的东西回到文件的开头然后从头开始读即可。