文件读写和去重的问题

前言:

有时候想要将新内容去重后写入文件,发现直接用以下代码并不能有效去重,这是为什么呢?

1
2
3
with open('poem.txt', 'a+', encoding='utf8') as fp:
if str(item) not in fp.read():
fp.write(str(item) + '\n')

分析与解决

将以上代码改为如下形式,发现去重又好用了:

1
2
3
4
with open('poem.txt', 'r', encoding='utf8') as r:
if str(item) not in r.read():
with open('poem.txt', 'a', encoding='utf8') as fp:
fp.write(str(item) + '\n')

但是这样写比较繁琐,能不能用最开始的方法,用一个 with 解决呢?答案是肯定的!只需要加一个 seek(0) 即可!代码如下:

1
2
3
4
with open('poem.txt', 'a+', encoding='utf8') as fp:
fp.seek(0)
if str(item) not in fp.read():
fp.write(str(item) + '\n')

这是为什么呢?其实是由于读写机制的问题,当一个文件被读或者写一次后,文件中类指针的东西指向的是整个文件的末尾,再次读时从末尾开始读的话肯定是什么都读不到了,所以会出现这样的问题。加上 fp.seek(0) 使得类指针的东西回到文件的开头然后从头开始读即可。

------------- 本文结束 感谢您的阅读 -------------
正在加载今日诗词....