我试图从csv获取值并将它们放入数据库中,我正在设法做到这一点,而没有很大的麻烦。Python读取CSV并将值存入MySQL数据库
但我知道需要回写到csv,所以下一次运行脚本时,它只会从csv文件中的标记下方将值输入到数据库中。
注意系统上的CSV文件会自动刷新每24小时,因此请记住csv中可能没有标记。所以如果没有标记被发现,基本上把所有的值都放在数据库中。
我打算每30分钟运行一次这个脚本,因此csv文件中可能会有48个标记,甚至可以删除标记并每次将它移下文件?
我一直在删除该文件,然后重新在脚本中创建一个文件,以便每个脚本都运行新文件,但这会打破系统的某种程度,因此这不是一个好选择。
希望你们能帮助..
谢谢
Python代码:
import csv
import MySQLdb
mydb = MySQLdb.connect(host='localhost',
user='root',
passwd='******',
db='kestrel_keep')
cursor = mydb.cursor()
csv_data = csv.reader(file('data_csv.log'))
for row in csv_data:
cursor.execute('INSERT INTO `heating` VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,)',
row)
#close the connection to the database.
mydb.commit()
cursor.close()
import os
print "Done"
我的CSV文件格式:
2013-02-21,21:42:00,-1.0,45.8,27.6,17.3,14.1,22.3,21.1,1,1,2,2
2013-02-21,21:48:00,-1.0,45.8,27.5,17.3,13.9,22.3,20.9,1,1,2,2
我喜欢这个答案,但我不能得到行我们正在放入0以上的最后一行文件甚至'(str(cur_row))'reviles 0 ...也记住当文件在00:01刷新: 00行号不会相对于新的csv文件,所以我想我们需要检查某处的时间 – ZeroG 2013-02-25 16:48:26
是的,你说得对,代码错了,你需要在结尾处移动'cur_row + = 1'语句for循环。至于00:01的刷新,你需要检查当前时间和最后一行文件的写入日期。 – Xion345 2013-02-25 17:14:34
@ZeroG:检测文件是否已被刷新的更好的办法是将CSV文件的大小存储在最后一行文件中(除了最后一个处理过的行)。如果文件大小在脚本的两次后续执行之间减少,则知道CSV文件已被刷新。 – Xion345 2013-02-25 17:21:50