鱼C论坛

 找回密码
 立即注册
查看: 1661|回复: 13

[已解决]UnicodeDecodeError:找了好久都没解决!!!

[复制链接]
发表于 2019-8-18 03:01:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码:
import easygui as f
import os

filenames =[]  
linenum = 0

tallcountlines=0
texts=''
appendtexts=[]
types=['.py','.c','.cpp','.net','.txt']
typescount={'.py':0,'.c':0,'.cpp':0,'.net':0,'.txt':0}
typesline={'.py':0,'.c':0,'.cpp':0,'.net':0,'.txt':0}
filedirs = f.diropenbox('请选择你的代码库','浏览文件夹')

for root,dirs,filename in os.walk(filedirs):
    for name in filename:
        filepath=os.path.join(root,name)
        name3,isc=os.path.splitext(filepath)
        if isc in types:
            typescount[isc]=typescount.get(isc)+1
            with open(filepath) as texts:
                for line in texts.readlines():
                    typescount[isc]=typescount.get(isc)+1


   
        
for keys in typesline.keys():
   
    tallcountlines +=typesline[keys]

    texts ='【'+keys+'】'+'源文件'+str(typescount[keys])+'个,源代码'+str(typesline[keys])+'行\n'
    appendtexts=appendtexts.append(texts)
        
titles = '你目前共累计编写了'+str(tallcountlines)+'行代码,完成度:'+str(tallcountlines/100000)+'%\n离10行代码还差'+str(100000-tallcountlines)+'行,请继续努力!'
showtext = f.textbox(titles,'统计结果',texts)


出错提示:
Traceback (most recent call last):
  File "C:/Python/fishc/count100000_354.py", line 22, in <module>
    for line in texts.readlines():
UnicodeDecodeError: 'gbk' codec can't decode byte 0xaa in position 93: illegal multibyte sequence

我对这个错误无语了,不能编码?好像没有什么不能编码的地方啊  老是提示这个求解决
最佳答案
2019-8-20 17:47:33
htygame 发表于 2019-8-20 16:49
试了  没用   有时候 pen 文本文件的时候就会出现这个问题,重行建立文件复制内容再保存就好了,也不知道 ...

用Notepad++改一下文件编码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-18 06:47:29 | 显示全部楼层

回帖奖励 +1 鱼币

with open(filepath, encoding='utf-8') as texts:
试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-18 07:57:18 | 显示全部楼层

回帖奖励 +1 鱼币

编码加码问题,把编码格式改改就行了:

  1. import easygui as f
  2. import os

  3. filenames =[]  
  4. linenum = 0

  5. tallcountlines=0
  6. texts=''
  7. appendtexts=[]
  8. types=['.py','.c','.cpp','.net','.txt']
  9. typescount={'.py':0,'.c':0,'.cpp':0,'.net':0,'.txt':0}
  10. typesline={'.py':0,'.c':0,'.cpp':0,'.net':0,'.txt':0}
  11. filedirs = f.diropenbox('请选择你的代码库','浏览文件夹')

  12. for root,dirs,filename in os.walk(filedirs):
  13.     for name in filename:
  14.         filepath=os.path.join(root,name)
  15.         name3,isc=os.path.splitext(filepath)
  16.         if isc in types:
  17.             typescount[isc]=typescount.get(isc)+1
  18.             with open(filepath, encoding="utf-8") as texts:
  19.                 for line in texts.readlines():
  20.                     typescount[isc]=typescount.get(isc)+1


  21.    
  22.         
  23. for keys in typesline.keys():
  24.    
  25.     tallcountlines +=typesline[keys]

  26.     texts ='【'+keys+'】'+'源文件'+str(typescount[keys])+'个,源代码'+str(typesline[keys])+'行\n'
  27.     appendtexts=appendtexts.append(texts)
  28.         
  29. titles = '你目前共累计编写了'+str(tallcountlines)+'行代码,完成度:'+str(tallcountlines/100000)+'%\n离10行代码还差'+str(100000-tallcountlines)+'行,请继续努力!'
  30. showtext = f.textbox(titles,'统计结果',texts)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-18 10:07:24 | 显示全部楼层
偷抄了小甲鱼的作业,小甲鱼也好像有这样的问题,小甲鱼是这样解释的:
     try:
            for each_line in f:
                lines += 1
        except UnicodeDecodeError:
            pass # 不可避免会遇到格式不兼容的文件,这里忽略掉......
这  我又点想不明白,用别的编译器做的。.py格式文件竟然也会有这样的问题,不能统计,为什么会这样?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-19 10:22:24 | 显示全部楼层

回帖奖励 +1 鱼币

最近也被编码问题困扰
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-20 16:49:14 | 显示全部楼层
新手·ing 发表于 2019-8-18 06:47
with open(filepath, encoding='utf-8') as texts:
试试

试了  没用   有时候 pen 文本文件的时候就会出现这个问题,重行建立文件复制内容再保存就好了,也不知道是什么原因
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-20 16:50:16 | 显示全部楼层
bigplumtree 发表于 2019-8-19 10:22
最近也被编码问题困扰

如果找到原因了给我也说下  共同提高
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-20 16:52:18 | 显示全部楼层
zltzlt 发表于 2019-8-18 07:57
编码加码问题,把编码格式改改就行了:

编码格式  ?with open(filepath, encoding='utf-8') as texts:这样 ?  试了  没用啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-20 16:54:27 | 显示全部楼层
需要安装 chardet 库 : pip install chardet

  1. import easygui as f
  2. import os
  3. import chardet

  4. filenames = []
  5. linenum = 0

  6. tallcountlines = 0
  7. texts = ''
  8. appendtexts = []
  9. types = ['.py', '.c', '.cpp', '.net', '.txt']
  10. typescount = {'.py': 0, '.c': 0, '.cpp': 0, '.net': 0, '.txt': 0}
  11. typesline = {'.py': 0, '.c': 0, '.cpp': 0, '.net': 0, '.txt': 0}
  12. filedirs = f.diropenbox('请选择你的代码库', '浏览文件夹')

  13. for root, dirs, filename in os.walk(filedirs):
  14.     for name in filename:
  15.         filepath = os.path.join(root, name)
  16.         name3, isc = os.path.splitext(filepath)
  17.         if isc in types:
  18.             typescount[isc] = typescount.get(isc) + 1
  19.             data = open(filepath, "rb").read()
  20.             with open(filepath, encoding=chardet.detect(data)['encoding']) as texts:
  21.                 for line in texts.readlines():
  22.                     typescount[isc] = typescount.get(isc) + 1

  23. for keys in typesline.keys():
  24.     tallcountlines += typesline[keys]

  25.     texts = '【' + keys + '】' + '源文件' + str(typescount[keys]) + '个,源代码' + str(typesline[keys]) + '行\n'
  26.     appendtexts = appendtexts.append(texts)

  27. titles = '你目前共累计编写了' + str(tallcountlines) + '行代码,完成度:' + str(tallcountlines / 100000) + '%\n离10行代码还差' + str(
  28.     100000 - tallcountlines) + '行,请继续努力!'
  29. showtext = f.textbox(titles, '统计结果', texts)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-20 17:04:51 | 显示全部楼层
zltzlt 发表于 2019-8-20 16:54
需要安装 chardet 库 : pip install chardet

安装后直接导入就可以了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-20 17:05:08 | 显示全部楼层
htygame 发表于 2019-8-20 17:04
安装后直接导入就可以了?

是,执行我的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-20 17:07:33 | 显示全部楼层
好像提示已装
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-20 17:47:33 | 显示全部楼层    本楼为最佳答案   
htygame 发表于 2019-8-20 16:49
试了  没用   有时候 pen 文本文件的时候就会出现这个问题,重行建立文件复制内容再保存就好了,也不知道 ...

用Notepad++改一下文件编码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-20 22:58:10 | 显示全部楼层

回帖奖励 +1 鱼币

赚鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 19:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表