如何将linecache与unicode一起使用?

2024-05-14 22:49:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我这样打开我的文件:

with open(sourceFileName, 'r', encoding='ISO-8859-1') as sourceFile:

但是,当我

^{pr2}$

我有个例外

"UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb4 in position 169: 
invalid start byte

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

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


Tags: 文件aswithisoopenbytecanutf
1条回答
网友
1楼 · 发布于 2024-05-14 22:49:46

linecache采用文件名,而不是文件对象,如您的用法所示。它没有编码的规定。同样来自documentation

This is used by the traceback module to retrieve source lines for inclusion in the formatted traceback.

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

在输入文件

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

在测试.py

^{pr2}$

输出

^{3}$

所以linecache可能不是解决问题的方法。相反,请按所示打开文件,并可能自己缓存这些行:

with open('x.txt',encoding='iso-8859-1') as f:
    lines = f.readlines()
print(lines[2])

如果您不想读取整个文件,也可以在读取时将行追加到列表中,类似于linecache。在

相关问题 更多 >

    热门问题