gpt4 book ai didi

python - 检查txt文件中是否包含ID

转载 作者:行者123 更新时间:2023-11-30 22:57:21 27 4
gpt4 key购买 nike

我想从特定用户下载新推文,并使用一些其他规则进行过滤。如何将我正在处理的推文中的推文 ID 与 tweetid.txt 文件中的 ID 进行交叉引用,以避免重复我在 NRE_tweet 文件中保存的内容?

这是我到目前为止所写的内容,但会产生重复。

i = 0
for tweet in NRE_tweets:

tweet_ids = open('tweetid.txt', 'a+')

if NRE_tweets[i]['in_reply_to_screen_name'] is None:

if NRE_tweets[i]['id_str'] not in tweet_ids.readlines():
print("adding tweet " + str(NRE_tweets[i]['id_str']))
info_wanted.append(NRE_tweets[i]['text'])
info_wanted.append(NRE_tweets[i]['id_str'])
info_wanted.append(NRE_tweets[i]['created_at'])

NRE_file = open('NRE.txt', 'a')
NRE_file.write(str(info_wanted) + '\n')
NRE_file.close()

append_tweet_ids = open('tweetid.txt', 'a')
append_tweet_ids.write(NRE_tweets[i]['id_str'] + '\n')
append_tweet_ids.close()

tweet_ids.close()
info_wanted = []

i += 1

编辑:感谢您的建议,工作代码现已排序。我可以采取一些措施来使其更干净,但目前......它有效。

NRE_tweets = t.statuses.user_timeline(screen_name='NRE_northern')
i = 0

NRE_file = open('NRE.txt', 'a')
openFile = shelve.open('tweetid')

try:
loadIDs = openFile['list_id']
print("list_id's loaded")
except:
print("exception entered")
loadIDs = []

for tweet in NRE_tweets:
if NRE_tweets[i]['in_reply_to_screen_name'] is None: # check that tweet isn't a reply
if NRE_tweets[i]['id_str'] in loadIDs:
print(str(NRE_tweets[i]['id_str']) + ' already stored')

else:
print("adding " + str(NRE_tweets[i]['id_str']))
# added wanted elements to a list
info_wanted.append(NRE_tweets[i]['text'])
info_wanted.append(NRE_tweets[i]['id_str'])
info_wanted.append(NRE_tweets[i]['created_at'])

# added list to txt file
NRE_file.write(str(info_wanted) + '\n')

loadIDs.append(NRE_tweets[i]['id_str'])
openFile['list_id'] = loadIDs

info_wanted = []

i += 1

print(openFile['list_id'])
NRE_file.close()
openFile.close()

最佳答案

不要使用if x is None:在你的代码中,除非有可能 x字面意思是None 。因为只有None is None而其他所有人(0、空迭代等)都是伪造者:) 相​​反,您应该使用 if not x

readlines()返回文件中的行,包括以 \n 结尾的行对于每一行。所以你应该写if (NRE_tweets[i]['id_str'] + '\n') not in tweet_ids.readlines():

就像评论中建议的那样,在 for 循环之前打开文件一次,并在 for 循环之后关闭文件。还可以考虑使用 shelve模块(或 sqlite3 );这将使处理数据变得更加容易。

编辑:

我还注意到您打开了 tweetid.txt两次,中间不关闭。不需要第二个open()在 IF block 内。您只需调用write()即可使用第一个文件句柄,以便将新 ID 添加到文件中。您还应该调用readlines()在循环外部并将其保存到一个列表中,然后在 for 循环头中使用该列表,因为使用新的代码结构,后续调用 readlines()当文件已耗尽时将返回一个空字符串。因此,当您找到新的 ID 时,请将其附加到此列表中,并调用 write()将 ID 添加到 tweetid.txt .

另一种方法是首先以读取模式打开文件,调用 readlines()并将结果保存到列表中,关闭文件。启动循环并执行列表上的所有操作;添加新 ID、删除等等。在循环结束时,您重新打开 tweetid.txt处于写入模式并将列表内容写入文件;它将覆盖旧内容。如果您可以添加大量新 ID,请使用此方法。

构建您的代码,以便您只打开文件一次,对其进行操作,最后关闭它们。

关于python - 检查txt文件中是否包含ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36683217/

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