读写文件的速度不够快,脚本无法识别更改

2024-04-20 15:44:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个脚本,当我最喜欢的YouTuber Casey Neistat上传一段新视频时,它最终将能够在twitter帐户上发布tweet。然而,为了做到这一点,我写了一个程序(应该)能够比较输出.txt他之前视频的所有链接的文件,当它意识到之前的YouTube链接列表中不包括最近上传的视频时,就会转到一个新的。我创建了两个方法,一个叫做“mainloop”,它反复运行以查看Casey Neistat所有视频的前一个列表是否与从方法“getneistnewvideo”检索到的新链接字符串相同。然而,我遇到的问题是,一旦程序识别出一个新的视频,它就会转到方法“getNewURL”,该方法将获取“getNewURL”中记录的第一个链接输出.txt'文件。但当我说要打印这个新的网址时,它说那里什么都没有。我的预感是,这是因为python没有向输出.txt文件足够快,但我可能是错的。你知道吗

我的代码如下:

import bs4
import requests
import re
import time
import tweepy


'''
This is the information required for Tweepy


CONSUMER_KEY =
CONSUMER_SECRET = 
ACCESS_KEY = 
ACCESS_SECRET = 
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth)

End of Tweepy Information
'''

root_url = 'https://www.youtube.com/'
index_url = root_url + 'user/caseyneistat/videos'

def getNeistatNewVideo():

    response = requests.get(index_url)
    soup = bs4.BeautifulSoup(response.text)
    return [a.attrs.get('href') for a in soup.select('div.yt-lockup-thumbnail a[href^=/watch]')]


def mainLoop():


    results = str("\n".join(getNeistatNewVideo()))

    past_results = open('output.txt').read()

    if results == past_results:
        print("No new videos at this time")

    else:
        print("There is a new video!")

        print('...')
        print('Writing to new text file')
        print('...')


        f = open("output.txt", "w")
        f.write(results)

        print('...')
        print('Done writing to new text file')
        print('...')

        getNewURL()

def getNewURL():

    url_search = open('output.txt').read()
    url_select = re.search('(.+)', url_search)
    print("New Url found: " + str(url_select))


while True:

    mainLoop()

    time.sleep(10)

    pass

Tags: 文件方法keyimporttxturlnewsecret
1条回答
网友
1楼 · 发布于 2024-04-20 15:44:37

你从不关闭文件,这可能就是问题所在。例如,在mainLoop()中,您应该有:

f = open("output.txt", "w")
f.write(results)
f.close()

或者更好:

with open('output.txt', 'w') as output:
    output.write(results)

一般来说,最好在打开文件的所有地方使用with语句(即使它处于“r”模式),因为它会自动关闭文件,并且还可以清楚地显示代码的哪个部分在给定的时间处理文件。你知道吗

相关问题 更多 >