создайте цикл «for» для шифрования нескольких файлов в python

#python #encryption

#питон #шифрование

Вопрос:

Доброе утро. Я пытаюсь создать цикл «for» для поиска каждого файла .txt в одной папке и их шифрования. Я смог успешно сделать это с одним файлом, но мне было поручено создать цикл для повторного шифрования нескольких файлов в одной папке

single_encrypt_file.py

 from cryptography.fernet import Fernet

file = open('key.key', 'rb')
key = file.read()
file.close()

for filename in os.listdir('testfolder'):

with open(filename, 'rb') as f:
    data = f.read()

fernet = Fernet(key)
encrypted = fernet.encrypt(data)

with open(filename, 'wb') as f:
    f.write(encrypted)
 

Я все еще новичок в python и программировании, поэтому было бы здорово, если бы у кого-нибудь были идеи о том, как мне следует изменить мой текущий код. Ваше здоровье!

Обновление: я изменил код на основе данного ответа, но я получаю сообщение об ошибке «Нет такого файла или каталога: testfile.txt » когда файл явно существовал, когда я пошел проверить.

Комментарии:

1. дело в том , что вы шифруете их одним и тем же ключом шифрования, и при расшифровке все файлы имеют одинаковый value результат …

Ответ №1:

Первое, что нужно сделать, это найти все имена файлов в папке. Для этого используйте os.listdir() .

Затем вы просто перебираете имена файлов:

 import os
for filename in os.listdir('dirname'):
     ##do what you want
 

Будьте осторожны, потому что вы можете захотеть проверить, содержит ли папка только те файлы, которые вы хотите зашифровать. В противном случае создайте исключение, чтобы игнорировать нежелательные файлы

Комментарии:

1. ‘dirname’ — это полный путь (что-то вроде ‘Users/User/Documents/homework.txt ‘) или сокращенное имя каталога (что-то вроде ‘../Documents/’)?

2. Зависит от того, хотите ли вы задать абсолютный путь или динамический.

3. При использовании with open() вы можете использовать полный или короткий путь. Я бы посоветовал полный путь, потому что короткий путь, который вы используете, работает только потому, что файл python находится в той же папке, что и файлы, которые вы хотите зашифровать

4. Появилась новая ошибка «Нет такого файла или каталога: testfile.txt » когда я явно пошел и проверил внутри саму папку и файл «testfile.txt » действительно существует. Как мне исправить эту проблему? Также обновил вопрос, включив в свой код то, что я сделал до сих пор

5. Находится ли ваш файл pyhton в папке? Также существует более одного файла с одинаковым именем?

Ответ №2:

Мне удалось выяснить проблему. оказывается os.listdir() , метод дает вам имена файлов только без путей и, поскольку мне нужно было открывать файлы в моем текущем каталоге (testfolder) Мне нужно было использовать другой, который есть os.path.join() .

single_encrypt_file.py

 for filename in os.listdir('testfolder'):

    testpath = os.path.join('testfolder', filename)
    #run encryption codes