孤独的美食家 发表于 2020-10-3 16:23:56

遍历子目录,然后打开txt文件,提示错误的问题

import os
for i in os.walk(os.curdir):
    for j in i:
      if os.path.splitext(j) == '.txt':
            txtfile = i+ os.sep + j            
            #print(txtfile)


            
            f = open(txtfile ,'r')
            f_content = f.read()
            print(f_content)

            f.close()

File "C:\Python34\MyCode\1 test 2.py", line 11, in <module>
    f_content = f.read()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 4: illegal multibyte sequence

zltzlt 发表于 2020-10-3 16:27:03

不是所有的文本文件都是 gbk 编码的。这样试试:

import os
for i in os.walk(os.curdir):
    for j in i:
      if os.path.splitext(j) == '.txt':
            txtfile = i+ os.sep + j            
            #print(txtfile)


            try:
                f = open(txtfile ,'r')
            except:
                f = open(txtfile, 'r', encoding='utf-8')
            f_content = f.read()
            print(f_content)

            f.close()

孤独的美食家 发表于 2020-10-3 16:27:47

这是错误,输出了一行乱码,最后是错误提示

疾风怪盗 发表于 2020-10-3 16:28:35

f = open(txtfile, 'r',encoding='utf-8')
加个encoding可以解决大部分

应该用try,碰到不能解码的,可能是二进制内容的文件,换一种打开模式

孤独的美食家 发表于 2020-10-3 16:29:45

zltzlt 发表于 2020-10-3 16:27
不是所有的文本文件都是 gbk 编码的。这样试试:

还是输出同样的错误

孤独的美食家 发表于 2020-10-3 16:33:50

疾风怪盗 发表于 2020-10-3 16:28
加个encoding可以解决大部分

应该用try,碰到不能解码的,可能是二进制内容的文件,换一种打开模式

按照您的修改了之后,之前是乱码的地方正常输出了。
然后之前可能是gbk编码的文件,现在不输出了。

疾风怪盗 发表于 2020-10-3 16:35:23

本帖最后由 疾风怪盗 于 2020-10-3 16:36 编辑

孤独的美食家 发表于 2020-10-3 16:33
按照您的修改了之后,之前是乱码的地方正常输出了。
然后之前可能是gbk编码的文件,现在不输出了。

所以说用try啊
打不开就换一种编码方式

不是只有一种编码

孤独的美食家 发表于 2020-10-3 16:47:16

哎,手动把所有的txt文件都另存为utf-8格式了,然后用utf-8打开 错误消失,好蠢。先这么做吧,要学的东西太多了

疾风怪盗 发表于 2020-10-3 16:52:18

孤独的美食家 发表于 2020-10-3 16:47
哎,手动把所有的txt文件都另存为utf-8格式了,然后用utf-8打开 错误消失,好蠢。先这么做吧,要学的东西太 ...

{:10_312:}你没学异常处理么。。。。。。try一下不就好了么。。。。。

孤独的美食家 发表于 2020-10-3 18:24:27

疾风怪盗 发表于 2020-10-3 16:52
你没学异常处理么。。。。。。try一下不就好了么。。。。。

还没学到,刚开始学文件处理{:10_250:}
页: [1]
查看完整版本: 遍历子目录,然后打开txt文件,提示错误的问题