Преобразование файла.txt в таблицу символов в Python 3

Есть небольшая проблема здесь:

Пытаюсь создать свой собственный "Алфавит", который я хочу применить к своим документам.txt,.doc,.odt для их шифрования.

Я хотел спросить, как я могу преобразовать файл.txt,.doc,.odt в список символов, чтобы затем я мог изменить их один за другим для своих собственных символов "алфавитов". А затем снова конвертируйте их и сохраните.

Я пытался использовать:

c = ('test.txt')

with open(c, 'w', encoding='utf-8') as a_file:
   #Here I was trying writing the entry right into the code to be written into the file
   a_file.write('Neco jineho napsaneho')
   for i, v in enumerate(c):
      c[i] = v.replace("N", "3")

with open(c, encoding='utf-8') as a_file:
   print(a_file.read())

Но так как "c" - это файл.txt, а не список, он работает и просто выдает мне эту ошибку:

c[i] = v.replace("N", "5")
TypeError: 'str' object does not support item assignment

Любая помощь будет оценена!

Ура,

J

1 ответ

Решение

Во-первых, делая это

with open(c, 'w', encoding='utf-8') as a_file:

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

Во-вторых, for i, v in enumerate(c): перебирает имя файла Не может работать! (что объясняет ошибку, которую вы получаете: вы пытаетесь зашифровать имя файла на месте: строки неизменяемы). Во всяком случае, не то, что вы хотите сделать...

И тебе не нужно enumerate, Просто создайте список, используя listcomp, перебирая файл (строки файла)

with open(c, 'r', encoding='utf-8') as a_file:
   lines = [v.replace("N", "3") for v in a_file]

# now write the "encrypted" file back using the same name
with open(c, 'w', encoding='utf-8') as a_file:
   a_file.write('Neco jineho napsaneho')
   a_file.writelines(lines)

Примечание: заменить v.replace("N", "3") по обычаю encrypt(v) если вы хотите более сложное шифрование.

lines = [encrypt(v) for v in a_file]

с encrypt определяется как:

def encrypt(v):
     return v.replace("N","3").replace("Z","5")

(не очень эффективно, но это всего лишь пример. Со словарем было бы лучше)

Другие вопросы по тегам