检查文件是否发生更改并插入到数据库中,通常涉及到文件监控、数据比较和数据库操作。这个过程可以用于自动化数据同步、日志记录、备份等场景。
以下是一个使用Python和SQLite的示例代码,展示如何检查文件是否发生更改并将其插入到数据库中。
import os
import hashlib
import sqlite3
import time
# 数据库连接
conn = sqlite3.connect('file_changes.db')
c = conn.cursor()
# 创建表
c.execute('''CREATE TABLE IF NOT EXISTS file_changes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
filename TEXT NOT NULL,
hash TEXT NOT NULL,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP)''')
def get_file_hash(file_path):
"""获取文件的MD5哈希值"""
hasher = hashlib.md5()
with open(file_path, 'rb') as f:
buf = f.read(65536)
while len(buf) > 0:
hasher.update(buf)
buf = f.read(65536)
return hasher.hexdigest()
def check_and_insert(file_path):
"""检查文件是否更改并插入数据库"""
current_hash = get_file_hash(file_path)
c.execute("SELECT hash FROM file_changes WHERE filename = ?", (file_path,))
result = c.fetchone()
if result is None or result[0] != current_hash:
c.execute("INSERT INTO file_changes (filename, hash) VALUES (?, ?)", (file_path, current_hash))
conn.commit()
print(f"File {file_path} has changed and inserted into database.")
# 监控文件变化
file_path = 'example.txt'
last_modified = os.path.getmtime(file_path)
while True:
current_modified = os.path.getmtime(file_path)
if current_modified != last_modified:
check_and_insert(file_path)
last_modified = current_modified
time.sleep(1)
inotify
。通过以上方法,可以有效地检查文件是否发生更改并将其插入到数据库中,确保数据的实时性和准确性。
领取专属 10元无门槛券
手把手带您无忧上云