注册 登录
编程论坛 Python论坛

python3.8.2的read函数的疑问

ke_liu 发布于 2020-10-13 09:08, 1574 次点击
程序代码:

with open("learning_python.txt") as file_object:
    contents=file_object.read()
    print(contents.rstrip())
   
    for line in file_object:
        print(line)

我在运行了2,3行输出文件内容后,再把file_object5,6分行输出,结果什么都输出不了,
然后我判断了下运行了2,3行语句的file_object是空的,难道read()函数读取变量后会将其清空吗,
还是说有什么原因呢?
8 回复
#2
fall_bernana2020-10-13 09:13
以下是引用ke_liu在2020-10-13 09:08:43的发言:


with open("learning_python.txt") as file_object:
    contents=file_object.read()
    print(contents.rstrip())
   
    for line in file_object:
        print(line)

我在运行了2,3行输出文件内容后,再把file_object5,6分行输出,结果什么都输出不了,
然后我判断了下运行了2,3行语句的file_object是空的,难道read()函数读取变量后会将其清空吗,
还是说有什么原因呢?

请使用contents=file_object.readlines()
#3
ke_liu2020-10-13 09:19
回复 2楼 fall_bernana
readlines我后面再用,就是想问一下file_object运行5,6分行输出,为什么什么都输出不了
#4
古1232020-10-13 16:41
这个不应该是for line in contents吗?
#5
ke_liu2020-10-13 19:03
回复 4楼 古123
也可以那样写,但我现在想知道的不是如何输出文件内容,而是为什么变量file_object执行read()后会被清空?
#6
fall_bernana2020-10-14 10:10
以下是引用ke_liu在2020-10-13 09:08:43的发言:


with open("learning_python.txt") as file_object:
    contents=file_object.read()
    print(contents.rstrip())
   
    for line in file_object:
        print(line)

我在运行了2,3行输出文件内容后,再把file_object5,6分行输出,结果什么都输出不了,
然后我判断了下运行了2,3行语句的file_object是空的,难道read()函数读取变量后会将其清空吗,
还是说有什么原因呢?


首先你要理解file_object是指向文件的一个对象。简单来说你可以理解成指向learning_python.txt的一条路。通过read()你可以从这条路获取整个文件信息或者readlines获取一行一行的信息的数组。然后通过file_object.close来关闭这条路。这里只是with帮你做了
所以你用for line in file_object:来获取内容是没用的,他只是条路,不包含数据,不能做别的事情.

[此贴子已经被作者于2020-10-14 10:13编辑过]

#7
ke_liu2020-10-14 14:45
回复 6楼 fall_bernana
它包含数据呀,只是在用read()之后它就没数据了
不使用read():
只有本站会员才能查看附件,请 登录

使用read()后:
只有本站会员才能查看附件,请 登录


#8
fall_bernana2020-10-14 15:09
回复 7楼 ke_liu
https://www.

seek() 方法用于移动文件读取指针到指定位置。
tell():返回文件对象当前所处的位置
当你读取一次后。文件读取指针移到了文件末尾。
如果你想这样再次读取。可以seek(0, 0)重新读取
file_object 是一个io.TextIOWrapper对象,他是个迭代器,实现了__iter__和__next__方法,使用过一次后就没有了。具体可以通过help去查看

[此贴子已经被作者于2020-10-14 15:52编辑过]

#9
ke_liu2020-10-14 16:02
回复 8楼 fall_bernana
谢谢大佬,我懂了,是我对file_object的理解有误
1