如何在Python中读取ANSI和Unicode txt文件?
我是python新手,面临一个奇怪的问题: 当一个目录中有50个txt文件时,我希望读取每个.txt文件并将其内容保存在一个唯一的变量中,如:如何在Python中读取ANSI和Unicode txt文件?,python,python-3.x,Python,Python 3.x,我是python新手,面临一个奇怪的问题: 当一个目录中有50个txt文件时,我希望读取每个.txt文件并将其内容保存在一个唯一的变量中,如: **file = open(fcf[i], 'r') text[i] = file.read()** 当我只读取一个文件时,可以: count = 0 for file_flag in fcf: if file_flag == 'feature.txt': file = open(fcf[count], 'r')
**file = open(fcf[i], 'r')
text[i] = file.read()**
当我只读取一个文件时,可以:
count = 0
for file_flag in fcf:
if file_flag == 'feature.txt':
file = open(fcf[count], 'r')
features = file.read().split() # a list, word by word
count = count+1
但是,在循环中读取txt文件是错误的:
下面是我的代码,出现了一个非常奇怪的错误
**text = np.zeros((np.shape(fcf)[0],1))
for flag in range(np.shape(fcf)[0]):
file = open(fcf[flag], 'r')
text = file.read() # string
file.close()**
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-41-7e544d88ee9d> in <module>()
2 for flag in range(np.shape(fcf)[0]):
3 file = open(fcf[flag], 'r')
----> 4 text = file.read() # string
5 file.close()
**UnicodeDecodeError: 'gbk' codec can't decode byte 0x94 in position 418: illegal multibyte sequence**
错误也会发生:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x94 in position 418: invalid start byte
有人能帮我吗?多谢各位
更新2:
在这些.txt文件中,大多数文件都是Unicode格式的,这对于python来说是持久的。我发现,在记事本中,有2.txt文件采用ANSI编码,这导致了这个问题
如何在python中同时阅读ANSI和Unicode
更新3:
谢谢大家。这个问题已经解决了
出现此问题的原因有两个:
希望它能对其他面临类似问题的人有所帮助。Thx您以默认文本模式打开文件。在读取文件时,Python会尝试对其进行解码,使用您平台的默认编码,即“gbk”。 显然,您试图读取的文件使用了另一种编码,这导致了此错误 您必须指明要在
open
中使用的编码。如果是“UTF-8”,例如:
file = open(fcf[flag], 'r', encoding='UTF-8')
如果你的文件使用了不同的编码,你必须先弄清楚,我不知道在你这个地区有什么共同点。你可以看看
对于中国人来说,列出的编码是“gb2312”、“gb18030”、“hz”,你可以尝试使用这些编码。可能的重复?还有很多相关的问题。你好,凯文,你提供的链接看起来很混乱……你能帮我更多忙吗?试试
open(fcf[flag]、'r',encoding='UTF-8')
。谢谢Kevin!又出现了一个类似的错误。我更新了关于这个问题的更多细节。当我读取单个txt文件时,没有问题。当我使用循环读取多个文件时,它会给我一个错误。你需要一些方法来确定编码。UTF8文件都有BOM吗?谢谢你,Thierry!同样的问题出现了。你能找出原因吗?UnicodeDecodeError:“utf-8”编解码器无法解码位置418处的字节0x94:起始字节无效;您的文件也没有用UTF8编码,请检查更新的答案。谢谢Thierry!我的电脑完全是英文的,所有txt都是英文的。我发现目录中有两个文件是用ANSI编码的,这就产生了错误。我如何读取ANSI错误为“未知编码:ANSI”T\u T
file = open(fcf[flag], 'r', encoding='UTF-8')