我的文件没有长度?尽管如此

时间:2016-01-28 10:50:03

标签: python

def file_contents():
    global file_encrypt
    encryption_file = input("What is the name of the file?")
    file_encrypt = open(encryption_file, 'r')
    contents = file_encrypt.read()
    print (contents)
    ask_sure = input("Is this the file you would like to encrypt?")
    if ask_sure == "no":
        the_menu()

这部分代码打开用户输入的文件,对吧?这里没有真正的问题。

def key_offset():
    key_word = ''
    count = 0
    total = 0
    while count < 8:
        num = random.randint (33, 126)
        letter = chr(num)
        key_word = key_word + letter    
        count = count + 1
        offset = ord(letter)
        total = total + offset
    print("Make sure you copy the key for decryption.")
    if count == 8:
        total = total/8
        total = math.floor(total)
        total = total - 32
        print(key_word)
        return total

这是计算偏移量等的部分。这里再次没有问题。

def encrypting():
    file = file_contents()
    total = key_offset()
    encrypted = ''
    character_number = 0
    length = len(file_encrypt)

然后问题就出现了,我在第一个代码块中将变量file_encrypt设为全局,因此它应该可以工作。我试过在另一个变量如file_en = file_encrypt下调用它并在长度计算中使用file_en,但它一直说它没有长度......我试过问朋友和我的老师,但他们似乎一无所知。问题是每次我到达这个部分时都说file_encrypt没有长度或者我试过的另一种方式,file_en没有长度,与TextWrapper.io有关。

2 个答案:

答案 0 :(得分:2)

file_encrypt是一个文件指针,确实没有长度。您文件的内容位于contents,但这是file_contents函数的本地变量。

真的不应该使用全局变量;这里没有任何理由。而是从contents返回实际数据 - file_contents - 然后您可以在调用函数中使用它。

答案 1 :(得分:1)

您的代码存在一些问题,但暂时忽略了这些问题,我认为您的主要问题是:

1)函数“file_contents”没有返回任何内容,我怀疑你想要返回“内容”。很难说不知道你想用“文件”变量做什么。

def encrypting():
    file = file_contents()  #  <--

2)正如其他人所说,“file_encrypt”是指向文件的指针,虽然在这个函数中你没有将它声明为全局,所以它可能是None。

def encrypting():
    file = file_contents()
    total = key_offset()
    encrypted = ''
    character_number = 0
    length = len(file_encrypt)  # <--

因此,这些修改应该能满足您的需求:

def file_contents():
    global file_encrypt
    encryption_file = input("What is the name of the file?")
    file_encrypt = open(encryption_file, 'r')
    contents = file_encrypt.read()
    print (contents)
    ask_sure = input("Is this the file you would like to encrypt?")
    if ask_sure == "no":
        the_menu()
    return contents  # <-- ADDED

def encrypting():
    contents = file_contents()  # <-- MODIFIED
    total = key_offset()
    encrypted = ''
    character_number = 0
    length = len(contents)  # <-- MODIFIED