鱼C论坛

 找回密码
 立即注册
查看: 1345|回复: 8

[已解决]关于 read 读取文件的问题

[复制链接]
发表于 2020-7-14 16:09:33 | 显示全部楼层 |阅读模式

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

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

x
问题:一个有标点(但是都在末尾)其他都是 中文字符的文件。使用seek让光标到达第二个字节的位置,然后进行全部read读取的时候,就发生错误了,然后再次用tell的时候,发现已经回到最末尾的。为啥呢?
最佳答案
2020-7-14 16:16:24
caesar2334 发表于 2020-7-14 16:14
>>> f =  open("C:\%users\\gues\\Desktop\\file.txt","r")
>>> f.read()
Traceback (most recent call ...


你这个报错是文件编码问题吧,你加上 encoding 参数设置下编码就好了,open 默认是 r 只读方式打开,所以这里可以不加 r :
f =  open("C:\\Users\\gues\\Desktop\\file.txt",encoding='utf-8')
f.read()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-14 16:11:35 | 显示全部楼层
什么编码?GBK 的汉字编码是两个字节,UTF-8 的汉字编码是三个字节。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-14 16:13:39 | 显示全部楼层
sunrise085 发表于 2020-7-14 16:11
什么编码?GBK 的汉字编码是两个字节,UTF-8 的汉字编码是三个字节。。

不知道那种编码,在txt文件里面书写的。我试试三个字节看看能不能读取。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-14 16:14:33 | 显示全部楼层
caesar2334 发表于 2020-7-14 16:13
不知道那种编码,在txt文件里面书写的。我试试三个字节看看能不能读取。

>>> f =  open("C:\\Users\\gues\\Desktop\\file.txt","r")
>>> f.read()
Traceback (most recent call last):
  File "<pyshell#44>", line 1, in <module>
    f.read()
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 20: illegal multibyte sequence

这样的,直接读取的话变成这样了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-14 16:15:29 | 显示全部楼层

因为 read() 函数会将文件指针移动到文件末尾
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-14 16:16:24 | 显示全部楼层    本楼为最佳答案   
caesar2334 发表于 2020-7-14 16:14
>>> f =  open("C:\%users\\gues\\Desktop\\file.txt","r")
>>> f.read()
Traceback (most recent call ...


你这个报错是文件编码问题吧,你加上 encoding 参数设置下编码就好了,open 默认是 r 只读方式打开,所以这里可以不加 r :
f =  open("C:\\Users\\gues\\Desktop\\file.txt",encoding='utf-8')
f.read()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-7-14 16:17:54 | 显示全部楼层
caesar2334 发表于 2020-7-14 16:14
>>> f =  open("C:\%users\\gues\\Desktop\\file.txt","r")
>>> f.read()
Traceback (most recent call ...


估计应该是utf-8编码
打开文件改为这个,应该就行了
f =  open("C:\\Users\\gues\\Desktop\\file.txt","r",encoding='utf-8')

GBK汉字编码是两个字节,这样从一个汉字中间读取是会出现解码错误的。
utf-8汉字编码是三个字节,也会有这样的问题。
所以一般不建议用seek移动光标到文件的中间位置,seek更多是用在移动光标到文件开始或文件末尾。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-7-14 16:19:15 | 显示全部楼层
sunrise085 发表于 2020-7-14 16:17
估计应该是utf-8编码
打开文件改为这个,应该就行了

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

使用道具 举报

 楼主| 发表于 2020-7-14 16:20:05 | 显示全部楼层
Twilight6 发表于 2020-7-14 16:16
你这个报错是文件编码问题吧,你加上 encoding 参数设置下编码就好了,open 默认是 r 只读方式打开,所以 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 01:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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