我試圖從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