gpt4 book ai didi

python - 如何防止使用 open(text.txt,a) 将相同的单词写入 txt 文件?

转载 作者:太空宇宙 更新时间:2023-11-04 10:12:17 24 4
gpt4 key购买 nike

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

希望对您有所帮助。

关于python - 如何防止使用 open(text.txt,a) 将相同的单词写入 txt 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37586001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com