鱼C论坛

 找回密码
 立即注册
查看: 2871|回复: 2

python读取含有汉字文本报错

[复制链接]
发表于 2020-9-13 13:41:47 | 显示全部楼层 |阅读模式
20鱼币
name1 = input('请输入需要比较的头文件:')
name2 = input('请输入需要比较的另一个文件:')

name1_ = ('E:\\' + name1 + '.txt')
name2_ = ('E:\\' + name2 + '.txt')

file_name1 = open(name1_ , 'r')
file_name2 = open(name2_ , 'r')

count = 0
number = 0
jas = []

for each_line1 in file_name1:
    number += 1

    for each_line2 in file_name2:
        
        if each_line1 != each_line2:
            count += 1
            jas.append(number)
            break
        else:
            break
   
file_name1.close()
file_name2.close()
print('两个文件共有【%d】处不一样:' % (count))
if count != 0:
    for i in jas:
        print('第%d行不一样' % (i))




第一个文本还能读取,但不能正确读取,第二个文本读取不了,会报解码错误,求解答

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-13 13:45:20 | 显示全部楼层
第一个文本还能读取,但不能正确读取

什么叫不能正确读取?应该也是解码问题吧
第二个文本读取不了,会报解码错误

解码错误,那你就换一种解码方式呗,在open中添加上解码方式参数,txt文件常见的编码方式有 'utf-8' 和 'GBK' ,解码参数写法:file_name1 = open(name1_ , 'r',encoding='utf-8')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-13 13:53:03 | 显示全部楼层
编码问题。
比如:就算是你在windows下 直接用记事本输入 联通 保存,然后再打开都会是乱码。

最佳处理方式
使用cchardet判断字符编码(准确度高)
cchardet 比chardet准确度高,速度快。

检测文件编码
import cchardet as chardet 

# 先检测出文件编码
with open("test.txt", "rb") as f:
    msg = f.read()

enc = chardet.detect(msg) # 返回的是个字典 编码和准确度。如:{'encoding': 'UTF-8', 'confidence': 0.9900000095367432}
print(enc)
enc = enc['encoding']

# 然后以指定编码打开文件
with open("test.txt", "r", encoding=enc) as f:
    print(f.read())

网页编码判断
import requests
import cchardet

res = requests.get('http://www.baidu.com/')
rawdata  = res.content
enc = cchardet.detect(rawdata)
enc = enc['encoding']
print(enc)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 17:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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