我这样打开我的档案:
with open(sourceFileName, 'r', encoding='ISO-8859-1') as sourceFile:但是,当我
previousLine = linecache.getline(sourceFileName, i - 1)我得到了一个例外
"UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb4 in position 169:
invalid start byte这是因为(我认为) linecache.getline返回一个str() (它没有decode()方法)。
我的脚本必须能够支持unicode,所以我不能简单地将输入文件转换为UTF-8。
发布于 2015-02-25 16:52:33
正如您的用法所示,linecache接受文件名,而不是文件对象。它没有关于编码的规定。也来自文档
跟踪模块使用它来检索源行,以便包含在格式化的跟踪中。
这意味着它主要用于Python源代码。事实证明,如果该文件有一个编码注释的Python源文件,它可以工作:
input.txt
# coding: iso-8859-1
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»
¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿtest.py
import linecache
print(linecache.getline('input.txt', 3))输出
[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»因此,linecache可能不是解决您的问题的方法。相反,如您所示,打开文件,或者自己缓存行:
with open('x.txt',encoding='iso-8859-1') as f:
lines = f.readlines()
print(lines[2])如果不想读取整个文件(类似于linecache ),还可以在读取时将行附加到列表中。
https://stackoverflow.com/questions/28716139
复制相似问题