只爱整活周淑怡 发表于 2020-8-5 23:50:40

关于readline

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

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

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

: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())就行了

沐羽尘 发表于 2020-8-6 00:19:22

不过其实用指针这个说法好像也不太恰当 不过意思是差不多的{:10_250:}

Twilight6 发表于 2020-8-6 07:58:00



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

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

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

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


永恒的蓝色梦想 发表于 2020-8-6 08:56:56

for i in a:
    print(a.readline())在 for i in a 时,首先会读取一行,赋值给 i,但是你并没有打印。
在 a.readline() 时,又读取了一行,这一行打印出来了。

所以,奇数行都被忽略了。

永恒的蓝色梦想 发表于 2020-8-6 08:57:50

沐羽尘 发表于 2020-8-6 00:15
emmmm 那个 你也知道readline是读取一行
所以呢 当你的时候
实际上可以想象是把指针指到了第一行 “从明 ...

(实际上直接a.readline()就可以了,不用print)非交互式不会自动打印结果。

沐羽尘 发表于 2020-8-6 12:02:00

永恒的蓝色梦想 发表于 2020-8-6 08:57
非交互式不会自动打印结果。

是吗?太久没学可能有点忘了{:10_266:}
谢谢噢
页: [1]
查看完整版本: 关于readline