如何打开ASCII文本优雅

时间:2015-05-28 00:34:56

标签: python encoding utf-8

使用Python打开文件时很困惑。顺便说一句,我正在使用python3.4。

首先它是一个日志文件(随时附加的大文件),因此iconv是不可能的。

Info1 file是ASCII文字。

demo git:master ❯ file 1.log 
1.log: ASCII text, with very long lines

Info2 ipython使用默认编码“UTF-8”打开它:

 In [1]: f = open('1.log')
    In [2]: f.encoding
    Out[2]: 'UTF-8'

THEN

首先我open('1.log', encoding='utf-8', mode='r')

  

错误:'utf-8'编解码器无法解码位置6435中的字节0xb1:无效的起始字节

open('1.log', encoding='ascii', mode='r')

时的第二个
  

错误:'ascii'编解码器无法解码6633位的字节0xe9:序数   不在范围内(128)

如何在每行读取时优雅地处理此文件?

这是我在github上的演示demo

3 个答案:

答案 0 :(得分:1)

可能是Windows CP 1252或拉丁语1.请尝试使用以下命令打开它:

open('1.log', encoding='latin-1', 'rU')

答案 1 :(得分:1)

我尝试了几种不同的编码组合,只需将脚本中的编码更改为latin1,就可以完全了解日志文件,因此行open('1.log', encoding='utf-8', mode='r')变为{{ 1}}。

答案 2 :(得分:0)

看起来它不是ascii文件。编码测试通常是不准确的。尝试chardet,它将为您检测编码。

然后

<!DOCTYPE html>
<html>

<head>
  <title></title>
  <link rel="stylesheet" type="text/css" href="styles/formula_styles.css">

  <script type="text/javascript">
    var a, b, c;

    function setValues1() {
      a = Number(document.getElementById("a").value);
      b = Number(document.getElementById("b").value);
      c = Number(document.getElementById("c").value);
    }

    function and() {
      setValues1();
      result1 = (-b + Math.sqrt(b * b - 4 * a * c)) / (2 * a);
      result2 = (-b - Math.sqrt(b * b - 4 * a * c)) / (2 * a);
      document.getElementById('result').innerHTML = "The volume of this cube is " + result1 + " and " + result2;
    }
  </script>

</head>

<body>

  <nav>
    <a href="index.html">Home</a> // <a href="levels.html">Grade Levels</a>
  </nav>

  <div id="container">
    <div id="formula">
      <input type="text" id="a" placeholder="'A' Variable" />
      <br>
      <input type="text" id="b" placeholder="'B' Variable" />
      <br>
      <input type="text" id="c" placeholder="'C' Variable" />
      <br>
      <input type="button" onclick="and()" value="Calculate!" />
      <div id="result">

      </div>
    </div>

  </div>
</body>

</html>

请注意,这可能需要很长时间。在您尝试之前,我建议您先手动循环显示明显的编码。

尝试使用UTF16和UTF32。然后尝试Windows编码。 Here is a list of several encodings.