Kiv*_*Kiv 20 python csv with-statement
是否可以with直接在CSV文件中使用该语句?能够做这样的事情似乎很自然:
import csv
with csv.reader(open("myfile.csv")) as reader:
# do things with reader
Run Code Online (Sandbox Code Playgroud)
但是csv.reader没有提供__enter__和__exit__方法,所以这不起作用.但是,我可以分两步完成:
import csv
with open("myfile.csv") as f:
reader = csv.reader(f)
# do things with reader
Run Code Online (Sandbox Code Playgroud)
第二种方式是理想的做法吗?为什么不让csv.reader直接与with语句兼容?
jfs*_*jfs 19
withstatement 的主要用途是对语句中使用的对象进行异常安全的清理.with确保关闭文件,释放锁定,恢复上下文等.
如果出现异常,csv.reader是否有清理的东西?
我会去:
with open("myfile.csv") as f:
for row in csv.reader(f):
# process row
Run Code Online (Sandbox Code Playgroud)
您无需一起提交要使用csv.reader和with声明的补丁.
import contextlib
Run Code Online (Sandbox Code Playgroud)
有关模块contextlib中的函数contextmanager的帮助:
contextmanager(func)
@contextmanager decorator.
Run Code Online (Sandbox Code Playgroud)
典型用法:
@contextmanager
def some_generator(<arguments>):
<setup>
try:
yield <value>
finally:
<cleanup>
Run Code Online (Sandbox Code Playgroud)
这使得:
with some_generator(<arguments>) as <variable>:
<body>
Run Code Online (Sandbox Code Playgroud)
相当于:
<setup>
try:
<variable> = <value>
<body>
finally:
<cleanup>
Run Code Online (Sandbox Code Playgroud)
这是我如何使用它的具体示例:curses_screen.
| 归档时间: |
|
| 查看次数: |
7881 次 |
| 最近记录: |