首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中对CSV文件使用"with“语句

在Python中对CSV文件使用"with“语句
EN

Stack Overflow用户
提问于 2009-01-13 22:36:28
回答 5查看 9.9K关注 0票数 21

是否可以对CSV文件直接使用with语句?做这样的事情似乎很自然:

import csv
with csv.reader(open("myfile.csv")) as reader:
    # do things with reader

但是csv.reader没有提供__enter____exit__方法,所以这是不起作用的。不过,我可以通过两个步骤来完成:

import csv
with open("myfile.csv") as f:
    reader = csv.reader(f)
    # do things with reader

这第二种方式是不是理想的方式呢?为什么他们不让csv.reader与with语句直接兼容呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-01-14 00:24:42

with语句的主要用途是对语句中使用的对象进行异常安全清理。with确保文件被关闭、锁定被释放、上下文被恢复等。

在出现异常的情况下,csv.reader是否有要清理的东西?

我会这么说:

with open("myfile.csv") as f:
    for row in csv.reader(f):
        # process row

你不需要提交补丁就可以同时使用csv.readerwith语句。

import contextlib

关于模块contextlib中函数上下文管理器的帮助

contextmanager(func)
    @contextmanager decorator.

典型用法:

    @contextmanager
    def some_generator(<arguments>):
        <setup>
        try:
            yield <value>
        finally:
            <cleanup>

这使得:

    with some_generator(<arguments>) as <variable>:
        <body>

等同于:

    <setup>
    try:
        <variable> = <value>
        <body>
    finally:
        <cleanup>

下面是我如何使用它的一个具体示例:curses_screen

票数 21
EN

Stack Overflow用户

发布于 2009-01-13 22:45:20

是。第二种方法是正确的。

至于为什么呢?谁知道呢。你说得对,这可能是一个简单的改变。它并不像其他事情那样具有高优先级。

您可以轻松地制作自己的补丁工具包并提交。

票数 4
EN

Stack Overflow用户

发布于 2009-01-14 04:57:07

问题是csv.reader并不能真正管理上下文。它可以接受任何可迭代,而不仅仅是一个文件。因此,它不会在其输入上调用close (顺便说一下,如果它调用了close,您可以使用contextlib.closing)。因此,对csv.reader的上下文支持实际上会做什么并不明显。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/441130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档