#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