with 在read file 中的作用
Posted maozhigao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,则会自动关闭,而不管读取过程中有无发生问题都会关掉
以上是关于with 在read file 中的作用的主要内容,如果未能解决你的问题,请参考以下文章
Python学习python __enter__ 与 __exit__的作用,以及与 with 语句的关系
file_get_contents(): SSL operation failed with code 1...解决办法和stream_context_create作用
file_get_contents(): SSL operation failed with code 1...解决办法和stream_context_create作用