Python for for for循环:FileExistError

时间:2017-12-13 19:39:03

标签: python encryption

我正在编写一个程序来加密文件并用密钥解密它们。代码:

import random, os, time


#Collecting all files
pad = r'C:\Users\Hugo\Desktop\Malware\Test'
bestand_list = []
for files in next(os.walk(pad))[2]:
    bestand_list.append(pad + '\\' + files)



#Random 10 characters making encryption 
s = 'abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&'
sleutel = ''
for i in range(10):
    sleutel += random.choice(s)
print(sleutel)
print('The computer is being encrypted')
time.sleep(1)


def Decrypt():
    x = 0
    decryptie = input('Enter your decryption code: \n')
    if (decryptie == sleutel):
        for bestand in bestand_list:
            for bestand_naam in bestandnaam_list:
                locatie = bestand_list[x]
                os.rename(bestand_naam, locatie)
            x += 1
        print ('Your file will now be decrypted')
    else:
        print ('Unfortunately your file was not decrypted')


def Encrypt():
    x = 0
    global bestandnaam_list
    bestandnaam_list = []
    for bestand in bestand_list:
        bestand_naam = ''
        locatie = bestand_list[x]
        for i in range (10):
            bestand_naam += random.choice(s)
        bestandnaam_list.append(pad + '\\' + bestand_naam)
        os.rename(locatie, pad + '\\' + bestand_naam)
        x += 1

    print('Your files are now encrypted')
    Decrypt()

Encrypt()

我遇到的问题是第二个文件通过解密重命名为第一个文件。这会导致FileExistError。可能有些问题:

x += 1 
def Decrypt()

中的

如何解决此问题?

编辑:完整追溯: Traceback(最近一次调用最后一次): 在Decrypt文件“crypto.py”,第29行,

os.rename(bestand_naam, locatie)

FileExistsError:[WinError 183]无法创建已存在的文件。

1 个答案:

答案 0 :(得分:2)

您的代码中存在多个问题。

def Decrypt():
    x = 0
    decryptie = input('Enter your decryption code: \n')
    if (decryptie == sleutel):
        for bestand in bestand_list:
            os.rename(bestandnaam_list[x], bestand)
            x += 1
        print ('Your file will now be decrypted')
    else:
        print ('Unfortunately your file was not decrypted')

这应该可以解决问题。

顺便提一下,当你提交你的代码时,请打印你正在做什么,为你和我们做什么,并且使用英语varnames因为我不知道什么是sleutel和其他变量名称的意思。

你正在做2个forloops,它给os.rename提供了错误的和多个文件名/路径。

忘记添加此内容,

def Encrypt中直接调用Decrypt,将其移到文件的末尾。

像这样:

Encrypt() Decrypt()