鱼C论坛

 找回密码
 立即注册
查看: 1348|回复: 6

[已解决]关于readline

[复制链接]
发表于 2020-8-5 23:50:40 | 显示全部楼层 |阅读模式

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

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

x
首先这是文本的内容
从明天起,做一个幸福的人
喂马,劈柴,周游世界
从明天起,关心粮食和蔬菜
我有一所房子,面朝大海春暖花开

从明天起,和每一个亲人通信
告诉他们我的幸福
那幸福的闪电告诉我的
我将告诉每一个人

给每一条河每一座山取一个温暖的名字
陌生人,我也为你幸福
愿你有一个灿烂的前程
愿你有情人终成眷属
愿你在尘世获得幸福
我只愿面朝大海,春暖花开

:w

a=open(r"C:\Users\86139\Desktop\爪巴虫\something.txt",encoding='utf-8')
#打开这个文本
for i in a:
    print(i)
    
这段代码能打出文本的每一行
然而如果我用readline的话就只能打出一半的内容
a=open(r"C:\Users\86139\Desktop\爪巴虫\something.txt",encoding='utf-8')
#打开这个文本
for i in a:
    print(a.readline())
    
a.close()

喂马,劈柴,周游世界

我有一所房子,面朝大海春暖花开

从明天起,和每一个亲人通信

那幸福的闪电告诉我的



陌生人,我也为你幸福

愿你有情人终成眷属

我只愿面朝大海,春暖花开

:w


这是为啥啊,readline 不也是读取每一行吗
最佳答案
2020-8-6 00:15:34
本帖最后由 沐羽尘 于 2020-8-6 12:24 编辑

emmmm 那个 你也知道readline是读取一行
所以呢 当你
for i in a:
的时候
实际上可以想象是把指针指到了第一行 “从明天起,做一个幸福的人”
然后你
a.readline()
的时候
实际上把指针指向第二行“喂马,劈柴,周游世界” 并print出来
然后呢再执行
for i in a:
又指向第三行“从明天起,关心粮食和蔬菜”
接着
a.readline()
指向第四行“我有一所房子,面朝大海春暖花开”并显示出来
剩下的就不用我说了吧
所以呢 可以用
while True:
        print(a.readline())
就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-6 00:15:34 | 显示全部楼层    本楼为最佳答案   
本帖最后由 沐羽尘 于 2020-8-6 12:24 编辑

emmmm 那个 你也知道readline是读取一行
所以呢 当你
for i in a:
的时候
实际上可以想象是把指针指到了第一行 “从明天起,做一个幸福的人”
然后你
a.readline()
的时候
实际上把指针指向第二行“喂马,劈柴,周游世界” 并print出来
然后呢再执行
for i in a:
又指向第三行“从明天起,关心粮食和蔬菜”
接着
a.readline()
指向第四行“我有一所房子,面朝大海春暖花开”并显示出来
剩下的就不用我说了吧
所以呢 可以用
while True:
        print(a.readline())
就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-6 00:19:22 | 显示全部楼层
不过其实用指针这个说法好像也不太恰当 不过意思是差不多的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-6 07:58:00 | 显示全部楼层


因为 for 循环直接循环文件对象时候就是以文件内容的一行一行读取的

所以你 for i in a: 这个过程就是在读取文件中的一行,此时文件指针会移动倒下一行的开头

当你在 for 寻内重新对文件对象读取一行,此时就是在 for 循环移动文件指针后继续读取一行

也就是你 for 循环已经读取一行了,而你 readline 还继续读取一行,且只打印第二次读取的内容,所以会导致只打印出一半的内容


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

使用道具 举报

发表于 2020-8-6 08:56:56 | 显示全部楼层
for i in a:
    print(a.readline())
在 for i in a 时,首先会读取一行,赋值给 i,但是你并没有打印。
在 a.readline() 时,又读取了一行,这一行打印出来了。

所以,奇数行都被忽略了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-6 08:57:50 | 显示全部楼层
沐羽尘 发表于 2020-8-6 00:15
emmmm 那个 你也知道readline是读取一行
所以呢 当你的时候
实际上可以想象是把指针指到了第一行 “从明 ...
(实际上直接a.readline()就可以了,不用print)
非交互式不会自动打印结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-6 12:02:00 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-8-6 08:57
非交互式不会自动打印结果。

是吗?太久没学可能有点忘了
谢谢噢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 14:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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