如何在Python中读取ANSI和Unicode txt文件?

时间:2018-03-04 08:12:16

标签: 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')
        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**

更新

以循环形式:

file = open(fcf[flag], 'r', encoding='UTF-8')

也会发生错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x94 in position 418: invalid start byte

有人能帮帮我吗?非常感谢你!

更新2:

似乎在这些.txt文件中,大多数都是Unicode,这对python来说是持久的。我发现,在记事本中,ANSI编码中有2个.txt文件,这导致了这个问题。

我如何在python中同时读取ANSI和Unicode?

UPDATE3:

谢谢大家。这个问题已修复。

这个问题有两个原因:

  1. 一些ANSI txt文件属于整体UTF8文件。

  2. ANSI编码上出现了一些奇怪的匹配:

  3. 没有 - 没有抰 不是 - 不是抰等等('n - &gt;抰) (&#34;嗯 - )ell)

    虽然我的电脑完全是英语,但ANSI txt仍会出现这个问题。 (需要手动修改,因为记事本只改变编码,而不是上面那些奇怪的字符...)

    希望它对面临类似问题的其他人有所帮助。 THX

1 个答案:

答案 0 :(得分:0)

您以默认文本模式打开文件。在阅读它时,Python会尝试使用您平台的默认编码对其进行解码,这似乎是“gbk&#39;”。 显然,您尝试阅读的文件使用其他编码,这会导致此错误。

您必须在open中指明要使用的编码。如果是UTF-8&#39;,例如:

file = open(fcf[flag], 'r', encoding='UTF-8')

如果你的文件使用不同的编码,你必须首先弄清楚,我不知道你所在地的常见情况。您可以查看the list of standard encodings

对于中文,列出的编码是&#39; gb2312&#39; gb18030&#39;&#39; hz&#39;,您可以尝试使用这些编码。