如何按特定顺序逐个上传指定文件夹内的图片(Twitter bot开发)
Tweepy实现Twitter机器人按指定顺序批量上传文件夹图片
要实现按指定顺序遍历文件夹上传所有图片,只需引入Python内置的文件处理模块,补充文件筛选、排序、循环上传逻辑即可,核心调整点如下:
- 导入内置
os、time模块,分别处理路径遍历/文件判断、上传间隔控制 - 新增配置项:指定目标图片文件夹路径、支持上传的图片格式后缀、上传间隔时长
- 遍历目标文件夹,过滤掉子文件夹和非图片格式的文件
- 对筛选出的图片列表按需求排序,默认按文件名字典序升序排列,支持自定义排序规则
- 循环遍历排序后的图片列表,逐个执行上传操作,上传间隔期休眠避免触发平台限流
修改后的可直接运行代码如下:
import os import time import tweepy # 平台接口密钥配置 consumer_key = 'XXXX' consumer_secret = 'XXXX' access_token = 'XXXX' access_token_secret = 'XXXX' auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret) api = tweepy.API(auth, wait_on_rate_limit=True) # 上传配置 TARGET_IMG_FOLDER = "./your_image_folder" # 替换为实际存储图片的文件夹路径 ALLOWED_IMG_EXT = (".jpg", ".jpeg", ".png", ".gif", ".webp") # 允许上传的图片格式 UPLOAD_INTERVAL = 3 # 单张图片上传后的等待时长,单位秒,避免触发限流 def upload_single_image(file_path): media = api.media_upload(file_path) # 提取不含后缀的文件名作为推文内容,兼容全平台路径规则 tweet_text = os.path.splitext(os.path.basename(file_path))[0] api.update_status(tweet_text, media_ids=[media.media_id_string]) print(f"上传完成:{tweet_text}") if __name__ == "__main__": # 筛选文件夹内所有符合格式要求的图片 img_list = [] for file_name in os.listdir(TARGET_IMG_FOLDER): full_path = os.path.join(TARGET_IMG_FOLDER, file_name) if os.path.isfile(full_path) and file_name.lower().endswith(ALLOWED_IMG_EXT): img_list.append(full_path) # 排序规则:默认按文件名字典序升序 # 可自定义key实现其他排序逻辑,例:按文件创建时间排序 key=lambda x: os.path.getctime(x) img_list.sort(key=lambda x: os.path.basename(x)) # 按顺序逐个上传 total = len(img_list) for idx, img_path in enumerate(img_list, 1): print(f"正在上传第 {idx}/{total} 张图片") upload_single_image(img_path) if idx != total: time.sleep(UPLOAD_INTERVAL) print(f"全部{total}张图片上传完成")
使用说明:
- 运行前将
TARGET_IMG_FOLDER的值替换为你实际存储图片的文件夹绝对/相对路径 - 如果需要调整上传顺序,只需修改
img_list.sort()的key参数即可,比如要按文件名中的数字序号排序,可以编写正则提取文件名中的数字作为排序依据 - 替换了原代码中手动拆分路径的逻辑,使用
os.path内置方法处理路径,可兼容Windows、macOS、Linux不同系统的路径分隔符,不会出现跨平台路径解析错误
内容的提问来源于stack exchange,提问作者Qasim
相关产品推荐
相关产品推荐

