赞
踩
在Python中我们经常会进行数据处理,数据来源各一,可能来自数据库,有可能来自流,也有可能来自文本文件.
当我们读取文件的时候,必须要考虑一个问题就是文件需要关闭,我们可以手动去关闭,也可以使用with,下面我们就看一下用不用with的区别
1.使用 with
a.正常读取,打印文件内容
In [36]: with open("e:/person.json") as f:
...: for line in f:
...: print(line,end='')
...:
{"name":"mike","sex":"m"}
{"name":"trumple","sex":"m"}
{"name":"nancy","sex":"f"}
{"name":"rose","sex":"f"}
b.再次查看文件对象,可以看到输出了一写基本信息
In [37]: f
Out[37]: <_io.TextIOWrapper name='e:/person.json' mode='r' encoding='cp936'>
c.对这个文件对象再次操作,发现这个文件对象已经关闭
In [38]: f.seek(0)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
in ()
----> 1 f.seek(0)
ValueError: I/O operation on closed file.
2.不使用with
a.正常读取文件,打印内容
In [44]: f=open('e:/person.json')
In [45]: for line in f:
...: print(line[:-1])
...:
{"name":"mike","sex":"m"}
{"name":"trumple","sex":"m"}
{"name":"nancy","sex":"f"}
{"name":"rose","sex":"f"}
b.查看文件对象
In [46]: f
Out[46]: <_io.TextIOWrapper name='e:/person.json' mode='r' encoding='cp936'>
c.对文件对象再次操作
调用seek(0)让指针回到第一行
In [47]: f.seek(0)
Out[47]: 0
文件内容可以再次打印出来
In [48]: for line in f:
...: print(line[:-1])
...:
{"name":"mike","sex":"m"}
{"name":"trumple","sex":"m"}
{"name":"nancy","sex":"f"}
{"name":"rose","sex":"f"
In [49]:
为了关闭文件,必须手动调用 f.close(),如果这是个简单的文件,算不上什么问题,如果文件内容很大,而且很多,如果忘记了关闭,则会遇到麻烦
如果使用了with,则会自动关闭,而不管读取过程中有无发生问题都会关掉
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。