python - 递归 glob 不返回文件

标签 python python-3.x encryption glob

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 中运行此程序时,我没有收到任何错误,但没有任何反应,我使用它来在用户注销时加密敏感用户目录,程序的所有其他部分都可以工作。有人可以解释一下这是怎么回事吗?

最佳答案

来自the doc for glob :

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):
     # ....

关于python - 递归 glob 不返回文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51636784/

相关文章:

php - 在 php 中加密/保护数据库连接字符串

python "in"运算符反射魔术方法

python - 如何使用默认按钮将 FloatField 增加或减少 1000?

python - 在 Python 3.3 上尝试 "repo init"时出现 TypeError

python - 如何避免解码为 str : need a bytes-like object error in pandas?

ios - 混淆数字(字符串) objective-c

python - 密文 Letter Freq Substitution : Comparing 2 dictionaries' dict keys by value and altering a text

python - R 上的 Python 版本与 Tensorflow 和 Keras 的问题

c++ - 从 python 解释器调用方法

python从字典写入文件