我有一个关于附加到文本文件的问题。我已经编写了一个脚本,该脚本的作用是它将读取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