2016-03-02 125 views
-3
<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:\用户\瓦尔德马\应用程序数据\本地\程序\ Python的\ Python35-32 \ Rot14.py” 61行,在 main() 文件“C:\ Users \ waldemar \ AppData \ Local \ Programs \ Python \ Python35-32 \ Rot14.py”,第18行,主要内容为 content = file.readlines() 文件“C:\ Users \ waldemar \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ codecs.py“,第706行,在readlines中 return self.reader.readlines(sizehint) 文件”C:\ Users \ waldemar \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ codecs.py“,第615行,在readlines中 data = self.read() 文件“C:\ Users \ waldemar \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ codecs.py”,第501行,在读 newchars,decodedbytes = self.decode(data,self.errors) UnicodeDecodeError:'utf-8'编解码器无法解码位置28中的字节0xea:无效延续字节 如何修复错误

+3

你可以在文章中包含你的代码作为文本(只需要缩进它的另外4个字符,这样格式化程序使它成为一个不错的块),而不是将它链接为图像。 –

+2

在您的问题中包含代码。 – zondo

+1

你确定你的源文件是utf-8编码,而不是拉丁文或其他? – antikantian

回答

0

输入文件不是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. 

需要注意的另一件事是Python 3不需要codecs.open。输出文件,例如,只使用Python 3内置的open

+0

是的你是对的。我的老师告诉我必须使用codes.open。我仍然有错误。程序仍然不起作用。 –

+0

我的问题有什么不好。 –