Используйте подстановочный шифр в python для шифрования и дешифрования файла .txt и вывода в новый файл .txt - PullRequest
0 голосов
/ 15 марта 2011

Я могу открыть файл правил и создать словарь для шифрования. Я также должен создать словарь для расшифровки текста. Я предполагаю, что это в основном та же функция с небольшими изменениями. Шифрование работает нормально, но я не могу заставить его работать. Вторая проблема в том, что, пока я шифровал файл, я убрал все пробелы и знаки препинания. Я не могу понять, как вернуть их в выходной файл после запуска программы. Он просто печатает в одном столбце. Наконец, я должен вывести это в файл .txt. Я могу создать .txt с назначенным пользователем именем, но не могу напечатать что-либо из файла.

Вот то, чего я достиг до сих пор.

#import clauses
import string


#function definitions



#encrypt dictionary
def createrulesdictencrypt(openFile):
    rulesencrypt1 = {}
    for line in openFile:
        rulessplit = string.split(string.strip(line))
        rulesencrypt1[rulessplit[0]] = rulessplit[1]
    return rulesencrypt1

#decrypt dictionary
def createrulesdictdecrypt(openFile):
    rulesdecrypt1 = {}
    for line in openFile:
        rulessplit = string.split(string.strip(line))
        rulesdecrypt1[rulessplit[1]] = rulessplit[0]
    return rulesdecrypt1

openFile = open('rules.txt', 'r')
rulesencrypt = createrulesdictencrypt(openFile)
rulesdecrypt = createrulesdictdecrypt(openFile)
#print rulesencrypt
#print rulesdecrypt




#function for encrypting file
def encryptfile(openFile2):
    for line in openFile2:
        for word in line.split():
            empty = ''
            for char in word:
                if char not in string.punctuation:
                    char=char.lower()
                    empty = empty+char 
                if len(empty) == 2:
                    print rulesencrypt[empty]
                    empty = ''
            if len(empty) == 1:
                print rulesencrypt[empty]



#function for decrypting file
def decryptfile(openFile2):
    for line in openFile2:
        for word in line.split():
            empty = ''
            for char in word:
                if char not in string.punctuation:
                    char=char.lower()
                    empty = empty+char 
                if len(empty) == 2:
                    print rulesdecrypt[empty]
                    empty = ''
            if len(empty) == 1:
                print rulesdecrypt[empty]


#main program

ende = raw_input("To encrypt a file, enter '0':\nTo decrypt a file, enter '1':")
filename = raw_input("Enter the name of the file to be processed:")
outfilename = raw_input("Enter the name of the file to save the result to:")
openFile2 = open(filename, 'r')
outputfile = open(outfilename, 'w')
fileencrypt = encryptfile(openFile2)
filedecrypt = decryptfile(openFile2)


if ende == "0":
    print encryptfile(fileencrypt)
if ende == "1":
    print decryptfile(filedecrypt)

Это то, что я пытаюсь зашифровать

Сэр Робин: «О, вы лжецы!»

Менестрель: [поет] "Храбро поднявшись на ноги, он избил очень смелого отступить. Отважное отступление отважного сэра Робина. "

1 Ответ

0 голосов
/ 15 марта 2011

Ваша первая проблема в том, что вы на самом деле не записываете зашифрованный текст в файл, а просто печатаете его в sys.stdout. Кстати, print добавляет \ n к выводу по умолчанию.

Вы можете переписать свою функцию дешифрования следующим образом:

#function for decrypting file
def decryptfile(openFile2, outfile): # <- CHANGED to add outfile
    for line in openFile2:
        for word in line.split():
            empty = ''
            for char in word:
                if char not in string.punctuation:
                    char=char.lower()
                    empty = empty+char 
                if len(empty) == 2:
                    outfile.write(rulesdecrypt[empty]) # <- CHANGED to write to file
                    empty = ''
            if len(empty) == 1:
                outfile.write(rulesdecrypt[empty]) # <- CHANGED to write to file

Затем вам нужно будет вызвать функцию decryptfile с файлом в качестве второго аргумента. Аналогичное изменение можно внести в функцию encryptfile.

Что касается пунктуации и пробелов, либо зашифруйте ее, либо просто оставьте на месте. После того, как вы удалили его, действительно нет хорошего способа заменить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...