打开问题【未解】
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都不行
求大佬解答{:10_266:}
可能是因为你文件中一个是 gbk而另一个文件为 utf-8 导致的
从代码报错中可以看出,是在 f2.read() 才报错,那么说明 f2 文件对象的编码不正确
所以你可以尝试着将 f2 的 open 中 encoding 参数值改为 utf-8
其实文件编码错误,就是文件保存时候的编码,和你 Python open 函数打开的编码不一致导致的,所以你可以将两个文本对象重新保存,更改下编码
具体操作就是,用记事本打开两个 txt 文件,然后选择另存为,弹出的路径窗口右下角就有编码选项,选择 ANSI 的话就是系统默认编码,中文系统默认编码是 GBK,选择此编码就可以不用设置 encoding 参数
或者你可以选择另存为时设置为 utf-8,那么记得在 open 添加 encoding = "utf-8"参数
了解一下chardet/cchardet模块,可以帮你侦测文本文件的编码,不必把encoding参数写死 本帖最后由 临时号 于 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()
页:
[1]