Python发送数据到API成功后自动删除对应txt文件的实现方法
API发送成功后自动删除源txt文件实现方案
现有代码核心问题
现有代码存在两个关键问题,导致无法实现预期的删文件逻辑:
scan_files函数仅返回了解析完成的字典数据,没有记录每个字典数据对应的源文件路径,API发送成功后无法定位要删除的目标文件- 代码中使用
os.chdir(path)切换工作目录的写法容易引发路径匹配错误,且失败分支中调用的close()无对应操作对象,属于无效代码
修改思路
- 调整文件扫描逻辑,将「解析后的数据」和「对应源文件的完整路径」成对存储、传递
- 在API返回2xx成功状态码的分支中,调用
os.remove(文件路径)删除对应源文件 - 移除无效冗余代码,避免不必要的工作目录切换,减少路径错误概率
修改后可直接复用的代码
import os import requests import glob # 基础配置 path = "./file" URL = 'http://.......' # 替换为实际API地址 def main(): print("程序启动\n") # 扫描文件得到(文件路径, 解析后数据)的配对列表 file_data_list = scan_files(path) # 逐个发送数据 for file_path, json_data in file_data_list: send_api(URL, json_data, file_path) def read_text_file(file_path): data_dictionary = {} # 显式指定编码避免不同系统下的中文乱码 with open(file_path, 'r', encoding='utf-8') as file: data = file.readlines() # --- 原有解析逻辑保持不变 --- # ............... '''UPDATE THE DICTIONARY''' # data_dictionary.update([(...)(...)]) # --- 解析逻辑结束 --- return data_dictionary def scan_files(target_path): file_data_list = [] # 直接拼接txt文件完整路径,不切换全局工作目录 for file in glob.glob(os.path.join(target_path, "*.txt")): parsed_data = read_text_file(file) # 同时存储文件路径和对应解析后的数据 file_data_list.append( (file, parsed_data) ) return file_data_list def send_api(url, json_data, source_file_path): requests_session = requests.session() post_api = requests_session.post(url, data=json_data) print("正在发送API请求") if 200 <= post_api.status_code < 300: print(f"发送成功,状态码: {post_api.status_code}") # 发送成功才执行删除操作 os.remove(source_file_path) print(f"已删除对应源文件: {source_file_path}\n") else: print(f"发送失败,状态码: {post_api.status_code},保留源文件不做处理\n") return post_api.status_code if __name__ == "__main__": main()
注意事项
- 所有文件路径通过
os.path.join()拼接,不会因为工作目录变化出现文件找不到的问题 - 仅当状态码落在200-299的成功区间时才会执行删除,发送失败的文件会完整保留
- 原代码中导入的
fileinput.close、datetime、time未被使用,已做移除,后续需要可自行加回
内容的提问来源于stack exchange,提问作者Zulaikha Ibrahim
相关产品推荐
相关产品推荐

