微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带块外访问值

如何解决带块外访问值

在下面的代码中,是否有办法在utterances_dict块之外访问变量with?以下代码显然返回错误ValueError: I/O operation on closed file.

from csv import DictReader

utterances_dict = {}
utterance_file = 'toy_utterances.csv'

with open(utterance_file,'r') as utt_f:
    utterances_dict = DictReader(utt_f)

for line in utterances_dict:
    print(line)

解决方法

我不是DictReader实现的专家,但是their documentation使实现本身对读者开放,让读者自己可以在构造后解析文件。这意味着底层文件可能必须保持打开状态,直到您完成使用它为止。在这种情况下,尝试在utterances_dict块之外使用with是有问题的,因为到那时基础文件将被关闭。

即使DictReader的当前实现实际上在构造上解析了整个csv,也不意味着它们的实现将来不会改变。

,

DictReader返回csv文件的视图。

将结果转换为词典列表。

from csv import DictReader

utterances = []
utterance_file = 'toy_utterances.csv'

with open(utterance_file,'r') as utt_f:
    utterances = [dict(row) for row in DictReader(utt_f) ]

for line in utterances:
    print(line)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。