如何防止使用open(text.txt,a)写入相同的单词到txt文件中



我有一个关于附加到文本文件的问题。我已经编写了一个脚本,该脚本的作用是它将读取JSON格式的URL,并提取标题列表并写入文件"WordsInCategory.text"。

由于此代码将在循环中使用,因此我使用了 f1 = open('WordsInCategory.text', 'a')。

但是我遇到了一个问题,那就是它会将已经存在的标题添加到文件中。

我很难提出解决此问题的解决方案,使用"w"将覆盖所写的内容。

我的代码如下:

import urllib2
import json

url1 ='https://en.wikipedia.org/w/api.php?action=query&format=json&list=categorymembers&cmtype=page&cmtitle=Category:Geography&cmlimit=100'
json_obj = urllib2.urlopen(url1)
data1 = json.load(json_obj)
f1 = open('WordsInCategory.text', 'a')
for item in data1['query']: 
    for i in data1['query']['categorymembers']:
        f1.write((i['title']).encode('utf8')+"n")  

请就我应该如何修改我的代码提供建议。

谢谢。

我建议在写入文件之前将每个标题保存在数组中(因此只写入给定文件一次)。您可以通过以下方式修改代码:

import urllib2
import json
data = []
f1 = open('WordsInCategory.text', 'w')
url1 ='https://en.wikipedia.org/w/api.php?
action=query&format=json&list=categorymembers
&cmtype=page&cmtitle=Category:Geography&cmlimit=100'
json_obj = urllib2.urlopen(url1)
data1 = json.load(json_obj)
for item in data1['query']: 
    for i in data1['query']['categorymembers']:
        data.append(i['title'].encode('utf8')+"n")
# Do additional requests, and append the new titles to the data array
f1.write(''.join(set(data)))
f1.close()

set允许我删除任何重复的条目。

如果将标题保留在内存中是一个问题,您可以在将标题写入文件之前检查标题是否已存在,但这可能非常耗时:

import urllib2
import json
data = []
url1 ='https://en.wikipedia.org/w/api.php?
action=query&format=json&list=categorymembers
&cmtype=page&cmtitle=Category:Geography&cmlimit=100'
json_obj = urllib2.urlopen(url1)
data1 = json.load(json_obj)
for item in data1['query']: 
    for i in data1['query']['categorymembers']:
        title = (i['title'].encode('utf8')+"n")
        with open('WordsInCategory.text', 'r') as title_check:
            if title not in title_check:
                data.append(title)
with open('WordsInCategory.text', 'a') as f1:
    f1.write(''.join(set(data)))
# Handle additional requests

希望对您有所帮助。

您可以跟踪添加的标题。

titles = []

然后在写作时将每个标题添加到列表中

if title not in titles:
    # write to file
    titles += title

最新更新