鱼C论坛

 找回密码
 立即注册
查看: 1700|回复: 3

[已解决]打开问题【未解】

[复制链接]
发表于 2022-6-6 20:05:05 | 显示全部楼层 |阅读模式

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

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

x
try:
     x1 = input("请输入第一个文本文档的完整路径+文件名+后缀名:")
     x2 = input("请输入第二个文本文档的完整路径+文件名+后缀名:")
     f1 = open(x1,"r",encoding='gb18030')
     f2 = open(x2,"r",encoding='gb18030')
     read_f1 = f1.read()
     read_f2 = f2.read()
     nr = read_f1 + "\n" + read_f2
     x = input("请输入新建的完整路径+文件名:")
     nr = nr + "\n"
     f = open(x,"w")
     f.write(nr)
except FileNotFoundError:
     print("抱歉,没有相关路径")
finally:
     f1.close()
     f2.close()
     f.close()
-------------------------------------------------------------------------------------------------------------------------
报错信息如下:
Traceback (most recent call last):
  File "I:\Python\PYTHON小程序\小项目\合并.txt的文档.py", line 7, in <module>
    read_f2 = f2.read()
UnicodeDecodeError: 'gb18030' codec can't decode byte 0xa1 in position 26: incomplete multibyte sequence
用gbk\utf - 8都不行
求大佬解答
最佳答案
2022-6-6 20:30:00

可能是因为你文件中一个是 gbk  而另一个文件为 utf-8 导致的

从代码报错中可以看出,是在 f2.read() 才报错,那么说明 f2 文件对象的编码不正确

所以你可以尝试着将 f2 的 open 中 encoding 参数值改为 utf-8



其实文件编码错误,就是文件保存时候的编码,和你 Python open 函数打开的编码不一致导致的,所以你可以将两个文本对象重新保存,更改下编码

具体操作就是,用记事本打开两个 txt 文件,然后选择另存为,弹出的路径窗口右下角就有编码选项,选择 ANSI 的话就是系统默认编码,中文系统默认编码是 GBK,选择此编码就可以不用设置 encoding 参数

或者你可以选择另存为时设置为 utf-8,那么记得在 open 添加 encoding = "utf-8"参数


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

使用道具 举报

发表于 2022-6-6 20:30:00 | 显示全部楼层    本楼为最佳答案   

可能是因为你文件中一个是 gbk  而另一个文件为 utf-8 导致的

从代码报错中可以看出,是在 f2.read() 才报错,那么说明 f2 文件对象的编码不正确

所以你可以尝试着将 f2 的 open 中 encoding 参数值改为 utf-8



其实文件编码错误,就是文件保存时候的编码,和你 Python open 函数打开的编码不一致导致的,所以你可以将两个文本对象重新保存,更改下编码

具体操作就是,用记事本打开两个 txt 文件,然后选择另存为,弹出的路径窗口右下角就有编码选项,选择 ANSI 的话就是系统默认编码,中文系统默认编码是 GBK,选择此编码就可以不用设置 encoding 参数

或者你可以选择另存为时设置为 utf-8,那么记得在 open 添加 encoding = "utf-8"参数


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

使用道具 举报

发表于 2022-6-6 21:10:41 From FishC Mobile | 显示全部楼层
了解一下chardet/cchardet模块,可以帮你侦测文本文件的编码,不必把encoding参数写死
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-6 21:15:43 | 显示全部楼层
本帖最后由 临时号 于 2022-6-6 22:14 编辑

你的第二个文件不是gb18030编码,你可以用记事本将第二个文件打开,另存为时选择ANSI编码,或者在第二个的open函数后面将指定编码改成第二个文件的编码,如:
f2 = open(x2,"r",encoding='utf-8')
或使用chardet模块先查看文件编码,现在终端中输入
pip install chardet
然后将代码改成这样:
import chardet

def getCode(file):
        with open(file,'rb') as f:
        tmp = chardet.detect(f.read())
        return tmp['encoding']
try:
        x1 = input("请输入第一个文本文档的完整路径+文件名+后缀名:")
        x2 = input("请输入第二个文本文档的完整路径+文件名+后缀名:")
        f1 = open(x1,"r",encoding=getCode(x1))
        f2 = open(x2,"r",encoding=getCode(x2))
        read_f1 = f1.read()
        read_f2 = f2.read()
        nr = read_f1 + "\n" + read_f2
        x = input("请输入新建的完整路径+文件名:")
        nr = nr + "\n"
        f = open(x,"w")
        f.write(nr)
except FileNotFoundError:
        print("抱歉,没有相关路径")
finally:
        f1.close()
        f2.close()
        f.close()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 00:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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