Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用shift加密文件_Python_File - Fatal编程技术网

Python 使用shift加密文件

Python 使用shift加密文件,python,file,Python,File,不知道我做错了什么?程序要求输入文件名并读取文件,但当要打印编码的消息时,它显示为空。我遗漏了什么,好像我将短语更改为普通的原始输入(“输入消息”),代码将正常工作,但这不是从txt文件读取 letters = "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"] cshift = int(input("Enter a number: "))

不知道我做错了什么?程序要求输入文件名并读取文件,但当要打印编码的消息时,它显示为空。我遗漏了什么,好像我将短语更改为普通的原始输入(“输入消息”),代码将正常工作,但这不是从txt文件读取

letters = "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
cshift = int(input("Enter a number: "))
phrase = open(raw_input("file name: "), 'r')
newPhrase = ""
for l in phrase:
   if l in letters:
        pos = letters.index(l) + cshift
        if pos > 25:
            pos = pos-26
        newPhrase += letters[pos]

else:
    newPhrase += " "
print(newPhrase)

open
函数不返回字符串,而是返回可从中读取字符串的已打开文件的句柄。您应该在Python中搜索有关如何将文件读入字符串的信息,然后在REPL中尝试,以确保它返回的是字符串而不是其他内容。

这里的问题是此行的for循环:

for l in phrase:
将返回完整的行,而不是单个字符

因此,您还必须循环遍历这些行中的单个字符,或者读取文件二进制文件,或者在文件对象上使用每次读取一个字符的函数

您可以简单地执行以下操作:

for line in phrase:
    for l in line:
        ... rest of your code here

短语
是一个文件对象。您没有从中读取任何数据。@TomZych是的,他正在枚举数据。不幸的是,枚举文件句柄会给他文件的行数,而不是文件的字符。@LasseV.Karlsen哇,你说得对。但是
l
将是一行,OP将其视为一个字符。夜间经过的编辑:)他正在读取文件的行,这不是问题。问题不在于他没有读取文件,问题在于他正在读取文件的行。还有其他方法可以做到这一点,但我认为OP应该将名为
phrase
的变量设置为包含该短语的字符串,而不是文件句柄。然后代码会工作,变量会有一个合理的名称。我同意这一点。更清晰的命名可以避免将来的混淆。