我是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? p>
UPDATE3:
谢谢大家。这个问题已修复。
这个问题有两个原因:
一些ANSI txt文件属于整体UTF8文件。
ANSI编码上出现了一些奇怪的匹配:
没有 - 没有抰 不是 - 不是抰等等('n - &gt;抰) (&#34;嗯 - )ell)
虽然我的电脑完全是英语,但ANSI txt仍会出现这个问题。 (需要手动修改,因为记事本只改变编码,而不是上面那些奇怪的字符...)
希望它对面临类似问题的其他人有所帮助。 THX
答案 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;,您可以尝试使用这些编码。