鱼C论坛

 找回密码
 立即注册
查看: 2327|回复: 7

关于文件读取read的疑问?

[复制链接]
发表于 2017-11-8 15:32:49 | 显示全部楼层 |阅读模式

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

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

x
大家好:我的问题是既然read()是按字节读取   一个汉字占两个字符位置  为什么  下图read(5)出来这么多文字?5不是2个半汉字吗?
QQ截图20171108152907.png

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-11-8 15:44:28 From FishC Mobile | 显示全部楼层
read()每次读取的长度是和编码方式有关的,如果采用unicode编码那么会每次读取两个字节
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-8 15:52:30 | 显示全部楼层
在python3里,用'tr'模式打开的文本文件应该是按字读取的。
一个汉字就是一个字符。

@小甲鱼 应该是用了原来python2教程的文案,没改过来~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-8 15:55:34 | 显示全部楼层
一个汉字未必只占用2个字节,这要看具体的编码方式。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-8 16:07:02 | 显示全部楼层
SixPy 发表于 2017-11-8 15:52
在python3里,用'tr'模式打开的文本文件应该是按字符读取的。
一个汉字就是一个字符。

这样啊。那书中所说的默认r 打开模式也是错的咯,只读模式。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-8 16:11:24 | 显示全部楼层
lbf4325 发表于 2017-11-8 16:07
这样啊。那书中所说的默认r 打开模式也是错的咯,只读模式。

'tr'模式 就是 默认r 模式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-8 16:21:14 | 显示全部楼层
SixPy 发表于 2017-11-8 16:11
'tr'模式 就是 默认r 模式

3.png 那这个是不是又写错了?,seek(45)默认坐标指针在什么位置?seek不是有两参数吗,只有一个参数的时候是什么个玩法?求教谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-9 16:47:40 | 显示全部楼层
read 方法一次是读取一个字节还是多个字节,主要视文件的编码而定。

书/视频中是以 GB2312(GBK)的方式保存的文件,所以 f.tell() 会得到 9 这个位置。

课后作业也是同样的道理哦,因为 seek 和 tell 是按字节定位的,所以如果定位到一个字符的中间(GBK 编码中文字符由两个字节组成,英文字符只占一个字节),那么就无法正常读取了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-25 19:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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