如何在Python中读取ANSI和Unicode 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')

我是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**
错误也会发生:

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:

谢谢大家。这个问题已经解决了

出现此问题的原因有两个:

  • 一些ANSI txt文件位于整个UTF8文件中

  • ANSI编码上出现一些奇怪的匹配:

  • 没有-没有抰 不是吗抰, 等等('n->抰) (“嗯-揥(厄尔)

    虽然我的电脑完全是英文的,但ANSI txt仍然存在这个问题。(由于记事本只更改编码,而不是上面奇怪的字符,所以需要手动修改…)


    希望它能对其他面临类似问题的人有所帮助。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')