Хорошо, так что немного введения. Я пытаюсь создать бота, который очищает изображения и сообщения от reddit и публикует их в Твиттере. Это не мой полный проект, но это почти все, что нужно.
Так что дело в том, что мне нужно загрузить изображения в каталог, и я назвал этот каталог «фото», но мне также нужно записать идентификаторы поста Reddit (что я делаю с другой функцией, не показанной здесь) в текстовый файл. и мне нужно прочитать его, чтобы проверить, если он уже был в Твиттере. Это то, что делает функция уже в твиттере.
Вот проблема, в моем первом цикле, он прочитает файл (который сейчас пуст) и затем перейдет к использованию функции get_image. Мне нужно изменить текущий каталог на каталог изображений, чтобы я мог хранить изображения, которые я делаю (os.chdir (img_dir)). Теперь каталог меняется, и когда я возвращаюсь, чтобы прочитать файл oldies.txt, он говорит, что его не существует, поскольку он находится в исходном каталоге, а не в каталоге pics.
Итак, что мне нужно сделать, это перейти в исходный каталог после того, как я загрузил изображения в каталог «pics», и я полностью застрял на этом.
import time
import os
from bs4 import BeautifulSoup as bs
import requests
import praw
import tweepy
def tweet_creator(subreddit_info):
'''Goes through posts on reddit and extracts a shortened link, title & ID'''
post_links = [] #list to store our links
post_titles = [] #list to store our titles
post_ids = [] #list to store our id's
post_imgs = []
print("[bot] extracting posts from sub-reddit")
for submission in subreddit_info.new(limit=5):
if not already_tweeted(submission.id):
post_titles.append(submission.title)
post_links.append(submission.shortlink)
post_ids.append(submission.id)
post_imgs = get_image(submission.url)
print(post_imgs)
else:
print("Already Tweeted")
return post_links, post_titles, post_ids, post_imgs
def already_tweeted(post_id):
'''reads through our .txt file and determines if tweet has already been posted'''
found = 0
print(os.getcwd())
with open(posted_reddit_ids, 'r') as f:
for line in f:
if post_id in line:
found = 1
break
return found
def get_image(img_url):
url = img_url
r = requests.get(url, headers = {'User-Agent' : 'reddit Twitter tool monitoring (by /u/RivianJourneyMan)'})
data = r.text
soup = bs(data, 'lxml')
image_tags = soup.findAll('img')
os.chdir(img_dir)
x = 0
mylist = []
for image in image_tags:
url = image['src']
source = requests.get(url, stream = True)
if source.status_code == 200:
img_file = img_dir + str(x) + '.jpg'
with open(img_file, 'wb') as f:
f.write(requests.get(url).content)
mylist.append(img_file)
f.close()
x += 1
return img_file
else:
mylist.append(None)
return mylist
Еще раз, это не мой полный код, а только соответствующие части, но это то, что он выводит, когда я его запускаю. Как вы можете видеть в функции alread_tweated, я попросил ее распечатать каталог, в котором я нахожусь, поскольку я зацикливаюсь, чтобы было легче увидеть проблему.
[bot] Setting up connection with reddit
[bot] extracting posts from sub-reddit
C:\Users\ali\PycharmProjects\cyberbot
pics0.jpg
C:\Users\ali\PycharmProjects\cyberbot\pics
Traceback (most recent call last):
File "C:/Users/ali/PycharmProjects/cyberbot/rtbot_with_img2.py", line 154, in <module>
main()
File "C:/Users/ali/PycharmProjects/cyberbot/rtbot_with_img2.py", line 150, in main
post_links, post_titles, post_ids, post_imgs = tweet_creator(subreddit)
File "C:/Users/ali/PycharmProjects/cyberbot/rtbot_with_img2.py", line 58, in tweet_creator
if not already_tweeted(submission.id):
File "C:/Users/ali/PycharmProjects/cyberbot/rtbot_with_img2.py", line 81, in already_tweeted
with open(posted_reddit_ids, 'r') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'oldies.txt'
Теперь я искал повсюду и пытался найти столько решений, чтобы вернуться в исходный каталог, но ни одно из них не сработало. Я попробовал os.chdir ('..') и поместил его чуть выше 'return mylist []', но это не сработало. Я очень хочу зайти в каталог 'pics', чтобы загрузить мои изображения, а затем я хочу вернуться в свой оригинальный каталог, который является 'cyberbot', чтобы я мог прочитать свой файл oldies.txt, чтобы увидеть, если я уже пост в Твиттере
Возможно, эта картина того, как мои каталоги и файлы помогут