用python实现给定文件夹中的文件设置文件标识符id,id从1开始,每次加1。并将id存入创建好的test.db数据库中,id存入创建好的se表中的id列,创建好的se表中包含key、ciper、id三列。不需要重新创建表,不需要重新命名文件
时间: 2024-05-08 09:17:25 浏览: 83
实现思路:
1. 遍历文件夹中的文件,对每个文件设置一个唯一的id,id从1开始,每次加1。
2. 将id存入创建好的test.db数据库中的se表中的id列。
3. 对于每个文件,将其文件名作为key,使用AES算法加密后的结果作为ciper,id作为id,存入se表中的key、ciper、id三列中。
代码实现如下:
```python
import os
import sqlite3
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
# 定义AES加密函数
def encrypt(key, data):
cipher = AES.new(key, AES.MODE_ECB)
padded_data = pad(data.encode('utf-8'), AES.block_size)
ciphertext = cipher.encrypt(padded_data)
return ciphertext.hex()
# 遍历指定文件夹中的文件,为每个文件设置id,并将id存入数据库中
def set_file_id(folder_path):
# 判断数据库文件是否存在,不存在则创建
if not os.path.exists('test.db'):
conn = sqlite3.connect('test.db')
c = conn.cursor()
c.execute('''CREATE TABLE se
(key TEXT PRIMARY KEY NOT NULL,
ciper TEXT NOT NULL,
id INTEGER NOT NULL)''')
conn.commit()
conn.close()
# 获取数据库中已有的最大id,用于设置新文件的id
conn = sqlite3.connect('test.db')
c = conn.cursor()
c.execute('SELECT MAX(id) FROM se')
max_id = c.fetchone()[0]
if max_id is None:
max_id = 0
# 遍历文件夹中的文件,为每个文件设置id,并将id、文件名、加密后的文件名存入数据库中
for filename in os.listdir(folder_path):
if os.path.isfile(os.path.join(folder_path, filename)):
max_id += 1
key = filename
ciper = encrypt('mysecretpassword', filename)
c.execute("INSERT INTO se (key, ciper, id) VALUES (?, ?, ?)", (key, ciper, max_id))
conn.commit()
conn.close()
if __name__ == '__main__':
folder_path = './files'
set_file_id(folder_path)
```
说明:
1. 使用sqlite3库连接数据库,如果数据库文件不存在则创建。
2. 使用SELECT MAX(id) FROM se语句获取数据库中已有的最大id,用于设置新文件的id。
3. 遍历文件夹中的文件,使用os.path.isfile判断是否为文件。
4. 对于每个文件,先将id加1,然后将文件名作为key,使用AES算法加密后的结果作为ciper,将id、key、ciper存入数据库中的se表中。
阅读全文