递归 glob returns 没有文件
Recursive glob returns no file
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 中我没有收到任何错误但没有任何反应时,我正在使用它来加密用户注销时的敏感用户目录,所有其他部分我的程序工作。有人可以解释一下它有什么问题吗?
If recursive is true, the pattern “**” will match any files and zero
or more directories and subdirectories. If the pattern is followed by
an os.sep, only directories and subdirectories match.
所以,如果你想在这里使用glob
,你需要包含这个模式:
for filename in glob.iglob(os.path.join(startPath, '**'), recursive=True):
# ....
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 中我没有收到任何错误但没有任何反应时,我正在使用它来加密用户注销时的敏感用户目录,所有其他部分我的程序工作。有人可以解释一下它有什么问题吗?
If recursive is true, the pattern “**” will match any files and zero or more directories and subdirectories. If the pattern is followed by an os.sep, only directories and subdirectories match.
所以,如果你想在这里使用glob
,你需要包含这个模式:
for filename in glob.iglob(os.path.join(startPath, '**'), recursive=True):
# ....