鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖

文件读取readline()问题

[复制链接]
 楼主| 发表于 2019-5-21 10:20:10 | 显示全部楼层

知道为啥不能上传了,新鱼友,积分不够,图片和附件还没有权限上传,积分攒够晋级了才行

这里先把我这里的record.txt中的内容原封不动的拷到这里吧,其实就是小甲鱼视频“ 第029讲:文件:一个任务”中的那个record.txt文件:

小客服:小甲鱼,今天有客户问你有没有女朋友?
小甲鱼:咦??
小客服:我跟她说你有女朋友了!
小甲鱼:。。。。。。
小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~"
小甲鱼:然后呢?
小客服:她买了两个,说发一个货就好~
小甲鱼:呃。。。。。。你真牛!
小客服:那是,谁让我是鱼C最可爱小客服嘛~
小甲鱼:下次有人想调戏你我不阻止~
小客服:滚!!!
================================================================================
小客服:小甲鱼,有个好评很好笑哈。
小甲鱼:哦?
小客服:"有了小甲鱼,以后妈妈再也不用担心我的学习了~"
小甲鱼:哈哈哈,我看到丫,我还发微博了呢~
小客服:嗯嗯,我看了你的微博丫~
小甲鱼:哟西~
小客服:那个有条回复"左手拿著小甲魚,右手拿著打火機,哪裡不會點哪裡,so easy ^_^"
小甲鱼:T_T
================================================================================
小客服:小甲鱼,今天一个会员想找你
小甲鱼:哦?什么事?
小客服:他说你一个学生月薪已经超过12k了!!
小甲鱼:哪里的?
小客服:上海的
小甲鱼:那正常,哪家公司?
小客服:他没说呀。
小甲鱼:哦
小客服:老大,为什么我工资那么低啊??是时候涨工资了!!
小甲鱼:啊,你说什么?我在外边呢,这里好吵吖。。。。。。
小客服:滚!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-21 10:22:28 | 显示全部楼层
大尾巴扁气球鼓 发表于 2019-5-21 10:20
知道为啥不能上传了,新鱼友,积分不够,图片和附件还没有权限上传,积分攒够晋级了才行 {:5_9 ...

这样拷贝是没有用处的 ,主要看你原始文件的编码格式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-21 15:07:48 | 显示全部楼层
我复制了 你的代码,运行结果截图如下:

批注 2019-05-21 150623.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-21 22:31:31 | 显示全部楼层
wp231957 发表于 2019-5-21 10:22
这样拷贝是没有用处的 ,主要看你原始文件的编码格式

将我代码和文本文档的原始文件创建了一个网盘链接,还请高手指教

链接: https://pan.baidu.com/s/1DZuXw1dubSJQNi2UCCte1Q
提取码: gm7t
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-21 22:32:26 | 显示全部楼层
13572044595 发表于 2019-5-20 22:57
这个问题你应该给出 record.txt 的原文件,方便别人去测试,

将代码和文本文档的原始文件创建了一个网盘链接,还请高手指点

链接: https://pan.baidu.com/s/1DZuXw1dubSJQNi2UCCte1Q
提取码: gm7t
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-22 08:35:08 | 显示全部楼层
大尾巴扁气球鼓 发表于 2019-5-21 22:31
将我代码和文本文档的原始文件创建了一个网盘链接,还请高手指教

链接: https://pan.baidu.com/s/1DZu ...

你这样再试一下:
f = open('record.txt','r',encoding="gb2312",errors="ignore")
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-22 11:41:23 | 显示全部楼层
13572044595 发表于 2019-5-21 15:07
我复制了 你的代码,运行结果截图如下:

不好意思,粘贴的时候

    if f.tell() > 1000:
        pdb.set_trace()

这两句忘记删掉了

这两句实际上是我自己用pdb调试代码用的,前面加个import pdb就行了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-22 14:00:45 | 显示全部楼层
wp231957 发表于 2019-5-22 08:35
你这样再试一下:
f = open('record.txt','r',encoding="gb2312",errors="ignore")

这样改了之后,代码可以正常运行了,也是预期的输出结果

不过还是想继续追问一下:

1. 原来描述的问题,原因和症结究竟出在什么地方?是代码里潜藏了什么问题?(不用所提供的代码,在单独打开的shell中以默认方式open这个文档,从头到尾是可以正常readline()读取到末尾的;另外,原来代码中以默认方式open后readline()读取至倒数第二行也都还是正常的)还是我这个record.txt的文档潜藏了什么问题?还是其他什么地方存在问题?

2. open里的encoding和errors这两个参数上网搜了一下:
        2.1 encoding说是跟编码相关的,一般都说的是utf-8、gbk之类的,这里的gb2312指的是什么内容呢?这么修改具体是针对代码或者文档中的什么问题来修改的呢?
        2.2 errors说是取ignore的时候,编码出现问题,程序会忽略而过,继续执行下面的程序:
                2.2.1 这里针对的是我在原贴中说的readline()之后文件指针多进一位的问题进行忽略吗?
                2.2.2 如果是针对这个多进一位的问题进行忽略后,取了ignore的值python为何能够自动跳到这一行的开头进行读取而不是后移一位进行读取呢?(自己试验了一下,将打开文件的语句改为f = open('record.txt', errors="ignore"),也是可以正常运行并输出预期结果的,因此感觉上errors="ignore"应该就是针对这个问题的,另外两个参数'r'和encoding应该可以不用添加)python在这其中的判断处理原则是什么呢?
                2.2.3 更进一步,一般在什么原则下打开文件时建议errors取ignore呢?取ignore时会带来其他什么样的问题、产生什么样的影响呢?

现在代码修改后问题解决了,只是仍苦恼于其中的原因症结,疑问颇多,望高手的进一步答疑解惑
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-15 23:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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