with 在read file 中的作用

  在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)
<ipython-input-38-16754355c5bd> in <module>()
----> 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,则会自动关闭,而不管读取过程中有无发生问题都会关掉

猜你喜欢

转载自www.cnblogs.com/maozhigao/p/9050256.html