如何修复错误
How to repair errors
<pre>import os, sys, codecs
from collections import defaultdict
letters = 'abcdefghijklmnopqrstuvwxyz'
bigLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
def countLetters(file):
results = defaultdict(int)
for line in file:
for char in line:
if char.lower() in letters:
c = char.lower()
results[c] += 1
return results
def main():
file = codecs.open('szyfrogram.txt','r',encoding='utf-8')
content = file.readlines()
file.close()
dictionary = countLetters(content)
most_popular = (max(dictionary, key=dictionary.get))
shift_for_a = 122 - ord(most_popular.lower()) + 1
saveDecoded(content, shift_for_a,'results_decoded.txt')
def saveDecoded(encoded, shift,file_output):
decoded = ''
for line in encoded:
line = line.strip('\n')
for char in line:
decoded = decoded + move(char,shift)
output = open(filr_output,mode = 'w')
output.write(decoded)
output.close
def move(letter,shift):
moveletter = letter
if letter in letters:
lower_range = 96
top_range = 122
moveCharLetters = ord(letter) + shift
if moveCharLetters > top_range:
moveCharLetters = lower_range + moveCharLetters-top_range
moveletter = chr(moveCharLetters)
else:
moveletter = chr(moveCharLetters)
elif letter in bigLetters:
lower_range = 64
top_range = 90
moveCharLetters = ord(letter) + shift
if moveCharLetters > top_range:
moveCharLetters = lower_range + moveCharLetters-top_range
moveletter = chr(moveCharLetters)
else:
moveletter = chr(moveCharLetters)
else:
moveletter = letter
return moveletter
print('countLetters')
main()<code>
回溯(最近调用最后):
文件 "C:\Users\waldemar\AppData\Local\Programs\Python\Python35-32\Rot14.py",第 61 行,位于
主要的()
文件 "C:\Users\waldemar\AppData\Local\Programs\Python\Python35-32\Rot14.py",第 18 行,在 main 中
内容 = file.readlines()
文件 "C:\Users\waldemar\AppData\Local\Programs\Python\Python35-32\lib\codecs.py",第 706 行,在 readlines 中
return self.reader.readlines(尺寸提示)
文件 "C:\Users\waldemar\AppData\Local\Programs\Python\Python35-32\lib\codecs.py",第 615 行,在 readlines 中
数据 = self.read()
文件 "C:\Users\waldemar\AppData\Local\Programs\Python\Python35-32\lib\codecs.py",第 501 行,已读
newchars, decodebytes = self.decode(数据, self.errors)
UnicodeDecodeError:'utf-8' 编解码器无法解码位置 28 中的字节 0xea:无效的连续字节
输入文件不是 UTF-8,否则您不会在 content = file.readlines()
上收到错误。
如果您将输入文件正确保存为 UTF-8,则另一个错误是需要将输出文件也写入 UTF-8:
output = open(file_output,mode = 'w', encoding='utf8')
那么输出文件包含:
Od godziny zerowej mam wachtę na Morzu Lewantyńskim.
另一件需要注意的事情是 codecs.open
不需要 Python 3。例如,输出文件只使用 Python 3 内置的 open
.
<pre>import os, sys, codecs
from collections import defaultdict
letters = 'abcdefghijklmnopqrstuvwxyz'
bigLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
def countLetters(file):
results = defaultdict(int)
for line in file:
for char in line:
if char.lower() in letters:
c = char.lower()
results[c] += 1
return results
def main():
file = codecs.open('szyfrogram.txt','r',encoding='utf-8')
content = file.readlines()
file.close()
dictionary = countLetters(content)
most_popular = (max(dictionary, key=dictionary.get))
shift_for_a = 122 - ord(most_popular.lower()) + 1
saveDecoded(content, shift_for_a,'results_decoded.txt')
def saveDecoded(encoded, shift,file_output):
decoded = ''
for line in encoded:
line = line.strip('\n')
for char in line:
decoded = decoded + move(char,shift)
output = open(filr_output,mode = 'w')
output.write(decoded)
output.close
def move(letter,shift):
moveletter = letter
if letter in letters:
lower_range = 96
top_range = 122
moveCharLetters = ord(letter) + shift
if moveCharLetters > top_range:
moveCharLetters = lower_range + moveCharLetters-top_range
moveletter = chr(moveCharLetters)
else:
moveletter = chr(moveCharLetters)
elif letter in bigLetters:
lower_range = 64
top_range = 90
moveCharLetters = ord(letter) + shift
if moveCharLetters > top_range:
moveCharLetters = lower_range + moveCharLetters-top_range
moveletter = chr(moveCharLetters)
else:
moveletter = chr(moveCharLetters)
else:
moveletter = letter
return moveletter
print('countLetters')
main()<code>
回溯(最近调用最后): 文件 "C:\Users\waldemar\AppData\Local\Programs\Python\Python35-32\Rot14.py",第 61 行,位于 主要的() 文件 "C:\Users\waldemar\AppData\Local\Programs\Python\Python35-32\Rot14.py",第 18 行,在 main 中 内容 = file.readlines() 文件 "C:\Users\waldemar\AppData\Local\Programs\Python\Python35-32\lib\codecs.py",第 706 行,在 readlines 中 return self.reader.readlines(尺寸提示) 文件 "C:\Users\waldemar\AppData\Local\Programs\Python\Python35-32\lib\codecs.py",第 615 行,在 readlines 中 数据 = self.read() 文件 "C:\Users\waldemar\AppData\Local\Programs\Python\Python35-32\lib\codecs.py",第 501 行,已读 newchars, decodebytes = self.decode(数据, self.errors) UnicodeDecodeError:'utf-8' 编解码器无法解码位置 28 中的字节 0xea:无效的连续字节
输入文件不是 UTF-8,否则您不会在 content = file.readlines()
上收到错误。
如果您将输入文件正确保存为 UTF-8,则另一个错误是需要将输出文件也写入 UTF-8:
output = open(file_output,mode = 'w', encoding='utf8')
那么输出文件包含:
Od godziny zerowej mam wachtę na Morzu Lewantyńskim.
另一件需要注意的事情是 codecs.open
不需要 Python 3。例如,输出文件只使用 Python 3 内置的 open
.