首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何与unicode一起使用linecache?

如何与unicode一起使用linecache?
EN

Stack Overflow用户
提问于 2015-02-25 10:07:12
回答 1查看 2.6K关注 0票数 1

我这样打开我的档案:

代码语言:javascript
复制
with open(sourceFileName, 'r', encoding='ISO-8859-1') as sourceFile:

但是,当我

代码语言:javascript
复制
previousLine = linecache.getline(sourceFileName, i - 1)

我得到了一个例外

代码语言:javascript
复制
"UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb4 in position 169: 
invalid start byte

这是因为(我认为) linecache.getline返回一个str() (它没有decode()方法)。

我的脚本必须能够支持unicode,所以我不能简单地将输入文件转换为UTF-8。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-25 16:52:33

正如您的用法所示,linecache接受文件名,而不是文件对象。它没有关于编码的规定。也来自文档

跟踪模块使用它来检索源行,以便包含在格式化的跟踪中。

这意味着它主要用于Python源代码。事实证明,如果该文件有一个编码注释的Python源文件,它可以工作:

input.txt

代码语言:javascript
复制
# coding: iso-8859-1
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»
¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ

test.py

代码语言:javascript
复制
import linecache
print(linecache.getline('input.txt', 3))

输出

代码语言:javascript
复制
[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»

因此,linecache可能不是解决您的问题的方法。相反,如您所示,打开文件,或者自己缓存行:

代码语言:javascript
复制
with open('x.txt',encoding='iso-8859-1') as f:
    lines = f.readlines()
print(lines[2])

如果不想读取整个文件(类似于linecache ),还可以在读取时将行附加到列表中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28716139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档