4个功能几乎相同,一个工作,但其他没有错误

2024-05-08 22:21:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有4个函数,它们应该从一个特定的docx文件中获取一些突出显示的文本scan4<colour>是文本的变量,这些函数几乎相同,但是正在搜索和替换不同的突出显示的文本,它们打印出相同的文本,但是不替换文本

这是4的两个函数,yellow一个有效,green一个无效 代码所做的是搜索和替换文本,然后加密,然后使用加密字符串到主文档中,另一个执行完全相同的操作,但搜索不同的突出显示颜色。我试着加密第一个函数,但第二个没有

此代码搜索黄色,对文本进行编码,然后将其替换,以便未加密的文档显示内容的加密字符串

def securi1_key():
        file = open("C:/Users/devff/PycharmProjects/SecurityLevels/Stored Keys/Securi1.key", "rb")
        global key1
        key1 = file.read()
        file.close()


    def rewrite_yellow():
        securi1_key()
        save_yellow_text()
        #   get key from file
        file = open("C:/Users/devff/PycharmProjects/SecurityLevels/Stored Keys/Securi1.key", "rb")
        texty = scan4yellow.decode("utf-8")
        encodedy = texty.encode()

        #   encrypt message
        f = Fernet(key1)
        encryptedy = f.encrypt(encodedy)
        print(scan4yellow)
        print(scan4yellow.decode("utf-8"))
        document = docx.Document(f1)
        for paragraph in document.paragraphs:
            if scan4yellow.decode("utf-8") in paragraph.text:
                inline = paragraph.runs
                # loops for runs
                for i in range(len(inline)):
                    if scan4yellow.decode("utf-8") in inline[i].text:
                        text = inline[i].text.replace(scan4yellow.decode("utf-8"), encryptedy.decode("utf-8"))
                        inline[i].text = text
        document.save(f1)


    def save_yellow_text():
        securi1_key()
        fp = f1
        p = Path(fp)
        filename1 = p.stem

        storedtexty = filename1 + " Yellow Text"
        storedtextencryptedy = storedtexty + ".encrypted"
        list_of_files = os.listdir("C:/Users/devff/PycharmProjects/SecurityLevels/Stored Text/")

        if storedtexty in list_of_files:
            storedtexty = (storedtexty + "1")

        file = open("C:/Users/devff/PycharmProjects/SecurityLevels/Stored Text/" + storedtexty, "w+")
        file.write(scan4yellow.decode("utf-8"))

        input_file1 = ("C:/Users/devff/PycharmProjects/SecurityLevels/Stored Text/" + storedtexty)

        if storedtextencryptedy in list_of_files:
            storedtextencryptedy = (storedtextencryptedy + "1")

        output_file1 = ("C:/Users/devff/PycharmProjects/SecurityLevels/Stored Text/" + storedtextencryptedy)

        with open(input_file1, "rb") as f:
            data = f.read()

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

        with open(output_file1, "wb") as f:
            f.write(encrypted)

        file.close()
        os.remove(input_file1)

此代码应完全相同,但对于绿色:

def securi2_key():
        file = open("C:/Users/devff/PycharmProjects/SecurityLevels/Stored Keys/Securi2.key", "rb")
        global key2
        key2 = file.read()
        file.close()


    def rewrite_green():
        securi2_key()
        save_green_text()
        #   get key from file
        file = open("C:/Users/devff/PycharmProjects/SecurityLevels/Stored Keys/Securi2.key", "rb")
        textg = scan4green.decode("utf-8")
        encodedg = textg.encode()
        print(encodedg)

        #   encrypt message
        f = Fernet(key2)
        encryptedg = f.encrypt(encodedg)
        print(encryptedg)

        document = docx.Document(f1)
        for paragraph in document.paragraphs:
            if scan4green.decode("utf-8") in paragraph.text:
                inline = paragraph.runs
                # loops for runs
                for i in range(len(inline)):
                    if scan4green.decode("utf-8") in inline[i].text:
                        text = inline[i].text.replace(scan4green.decode("utf-8"), encryptedg.decode("utf-8"))
                        inline[i].text = text
        document.save(f1)


    def save_green_text():
        securi2_key()
        fp = f1
        p = Path(fp)
        filename2 = p.stem

        storedtextg = filename2 + " Green Text"
        storedtextencryptedg = storedtextg + ".encrypted"
        list_of_files = os.listdir("C:/Users/devff/PycharmProjects/SecurityLevels/Stored Text/")

        if storedtextg in list_of_files:
            storedtextg = (storedtextg + "1")

        file = open("C:/Users/devff/PycharmProjects/SecurityLevels/Stored Text/" + storedtextg, "w+")
        file.write(scan4green.decode("utf-8"))
        print(scan4green.decode("utf-8") + "tested1")

        input_file2 = ("C:/Users/devff/PycharmProjects/SecurityLevels/Stored Text/" + storedtextg)

        if storedtextencryptedg in list_of_files:
            storedtextencryptedg = (storedtextencryptedg + "1")

        output_file2 = ("C:/Users/devff/PycharmProjects/SecurityLevels/Stored Text/" + storedtextencryptedg)

        with open(input_file2, "rb") as f:
            data = f.read()

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

        with open(output_file2, "wb") as f:
            f.write(encrypted)

        file.close()
        os.remove(input_file2)

我应该有一些不连贯的字符串替换实际文本和实际文本保存在另一个文件加密,但所有这一切都是工作的第一个黄色函数,而不是绿色函数

理想情况下,它应该从读入文件中提取文本,制作一个副本,将其写入一个文件并加密,然后从中提取加密字符串并替换它在读入文件中的位置,但它只适用于黄色代码,而绿色代码和其他几乎相同的代码则不起作用


Tags: keytextin文本inlineopenusersutf
1条回答
网友
1楼 · 发布于 2024-05-08 22:21:58

我找到了一个答案,我所改变的与我提供的代码无关,但当我在文本中阅读时,它是scan4green = (word.find(tag_t).text.encode('utf-8').lower())。这显然导致它不能正常工作,但是scan4yellow确实工作了,因为我没有在末尾附加.lower()。你知道吗

相关问题 更多 >