添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  解释:此时我们会发现,2是无法打印出来的,原来py中也存在类似c/c++中考虑指针位置的问题

  其实这个很好理解,当我门打开文件并遍历一遍后,文件指针自然会来到文件得最为尾端,在c/c++中我们只需将指针位置重新挪到开头即可,可是我们是python呀,怎么可以那么蠢!

  解决方法:

  (一)
将readlines()返回得对象存储起来

    例如1:
list1 = open(r"./1.txt").readlines()
for i in list1:
    print 1
for i in list1:
    print 2
file_obj = open(r"./1.txt")
list1 = file_obj.readlines()
for i in list1:
    print 1
for i in list1:
    print 2
file_obj.close()

(二)将文件打开两次

with open('./1.txt', 'r') as f:
    for i in f.readlines():
        print 1
with open('./1.txt', 'r') as f:
    for i in f.readlines():
        print 2
for i in open(r"./1.txt").readlines():
    print 1
for i in open(r"./1.txt").readlines():
    print 2

总结:前两个例子只需要对文件打开一次,后两个例子等于对文件进行了两次打开,但是四种方法都可以做到我们想要的结果。

推荐:当处理的log数据量不大的时候,个人推荐使用 例2 ,因为只需要打开一次,之后都是对对象进行操作了。

当处理的文件很大的时候建议使用 例3 ,因为with有神奇的用处,不但可以自动调用close()方法,还可以有保险的作用,当文件特别大,内存不够的时候,它可以自动限制每次的大小,使得程序顺利的走下去

问题: 例1和例4 中在这里想向大神们提出个问题,从代码量上这两种无疑少了很多,但是问题是虽然可以正常的得到我们想要的,可是文件打开之后 终究是没有关闭 的, 因为没有file对象,导致无法调用close(),这样会造成怎样的影响?最终又是谁去处理这个问题? 我的理解可能就是py的强大最终程序结束的时候自我处理了, 那这样写会不会很消耗资源,更严重的是会不会导致py的内存泄露呢? 目前我的认知py怎么可能内存泄漏,毕竟它那么强大。哈哈哈!!!

用心写每一篇博客