Python 发布csv行,并在发布后将其删除

Python 发布csv行,并在发布后将其删除,python,api,csv,request,Python,Api,Csv,Request,我有一个带热电偶的树莓圆周率,它将一行温度数据写入两个csv:一个用于圆周率的本地圆周率和一个数据队列csv。然后,我有另一个脚本,它作为一个单独的守护进程运行,应该使用数据队列csv的内容,并对每一行向api发出post请求。为了避免重复,我想删除发布到api的队列csv的每一行。我有以下代码: def post(根目录): 标题=[] sent=[]#这将包含发送到api的每一行 将open(root+'/data_queue.csv',r')作为f: 读卡器=csv。读卡器(f) 请求头=

我有一个带热电偶的树莓圆周率,它将一行温度数据写入两个csv:一个用于圆周率的本地圆周率和一个
数据队列
csv。然后,我有另一个脚本,它作为一个单独的守护进程运行,应该使用数据队列csv的内容,并对每一行向api发出post请求。为了避免重复,我想删除发布到api的队列csv的每一行。我有以下代码:

def post(根目录):
标题=[]
sent=[]#这将包含发送到api的每一行
将open(root+'/data_queue.csv',r')作为f:
读卡器=csv。读卡器(f)
请求头={'Content-Type':'application/json'}
标题=下一个(读卡器)#抓取标题
对于行输入读取器:#在csv中循环行
payload={}#生成一个payload dict,头作为键,值作为行内容
sent.append(行)
对于范围内的i(len(headers)):#填充有效负载
如果i==0或i==1或i==3:#将数据转换为适当的类型
行[i]=int(行[i])
如果i==5或i==6或i==7:
尝试:
第[i]行=浮动(第[i]行)
除值误差为m外:#在我们实际校准保温瓶之前,校正和不确定度填写为“无”
警告({}:找不到{}的数据。格式(m,头[i]))
第[i]行=0
payload.update({headers[i]:行[i]})
#将dict转换为json,并向api发出post请求
response=requests.post('http://192.168.1.67:5000/new_row,headers=request_headers,data=json.dumps(有效负载))
状态=响应。状态\代码
logger.debug('{}:sent'.format(status)if status==200,否则'{}:failed to send'.format(status))
如果status==500:#如果行未能过帐,则从发送列表中删除该行
sent.pop(len(sent)-1)
打印(已发送)
logger.debug('开始清理')
csv_清理(根目录、已发送、标题)
logger.debug('csv已清理')
def csv_清理(根目录、已发送、标题):
剩菜=[]
new=root+'/data\u queue\u edit.csv'
old=root+'/data_queue.csv'
打开(新的“w”)作为输出:#创建编辑csv
logger.error('创建新csv')
writer=csv.writer(输出)
writer.writerow(标题)
logger.error('writed headers')
将open(old,'r')作为inp:#打开old csv并抓取剩菜
logger.error('打开旧csv')
读卡器=csv.读卡器(inp)
下一步(读卡器)#跳过标题
对于读取器中的旧_行:
剩菜。追加(旧_行)
对于发送中的新行:#比较旧csv和所有发送行,如果dt匹配,则将其从剩余中删除
如果旧_行[2]==新_行[2]:
leftovers.pop(leftovers.index(旧_行))
logger.error('removed{}'。格式(新行))
将open(new,'a')作为out:#将剩余内容附加到新csv
logger.error('追加到新csv')
writer=csv.writer(输出)
对于“剩余”中的行:
logger.error('写入{}'。格式(行))
writer.writerow(行)
删除操作系统(旧)
os.重命名(新、旧)#用新csv替换旧csv
logger.error('重命名的文件')

虽然这是可行的,但如果每次出现这样的情况,raspberry pi在其发布后但在其清理之前将移动数据添加到队列csv,那么我将丢失所述数据。除了为我的脚本定时同步清理队列以避免丢失数据之外,还有其他解决方法吗?

为什么不为每个新记录上载一个新的json/csv文件,然后让消费应用程序在处理后删除该文件?这样,您就不会在两个应用程序都试图锁定文件时遇到问题了?只是尝试了这个方法并使其正常工作,我似乎无法发现任何可能丢失数据的缺陷。非常感谢你的建议!