python – csv.writer.writerows采用迭代器?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – csv.writer.writerows采用迭代器?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1582字,纯文字阅读大概需要3分钟。
内容图文
![python – csv.writer.writerows采用迭代器?](/upload/InfoBanner/zyjiaocheng/795/1d33e61f13b343bd9d26411ce7500a3d.jpg)
Write all the rows parameters (a list of row objects as described
above) to the writer’s file object, formatted according to the current
dialect.
它建议作家将列表作为参数.
但它可以采用迭代器,没问题
python -c 'import csv
> csv.writer(open("test.file.1", "w")).writerows(([x] for x in xrange(10)))
> '
cat test.file.1
0
1
2
3
4
5
6
7
8
9
是什么赋予了?它是在写入文件之前将迭代器转换为列表,还是文档误导,它实际上可以将迭代器写入文件而不实现它们?底层代码在C中;我无法理解它.
解决方法:
根据sources for csv,DictWriter类首先创建一个行列表以传递给实际的writer.见line 155:
def writerows(self, rowdicts):
rows = []
for rowdict in rowdicts:
rows.append(self._dict_to_list(rowdict))
return self.writer.writerows(rows)
有趣的是,在_csv模块(C扩展名)中实现的Writer类不需要列表.我们可以从源代码中看到它只是从参数中获取了一个iterable并调用了PyIter_Next:
csv_writerows(WriterObj *self, PyObject *seqseq)
{
PyObject *row_iter, *row_obj, *result;
row_iter = PyObject_GetIter(seqseq);
// [...]
while ((row_obj = PyIter_Next(row_iter))) {
result = csv_writerow(self, row_obj);
// [...]
}
请注意,根本没有调用PyList_ *方法,也没有检查列表类型.
在任何情况下,两个writerows方法都接受任何iterable,但是DictWriter将创建一个(不必要的)中间列表.
在以前的版本中,Writer类可能只接受列表,因此,DictWriter必须进行转换,但现在它已经过时了.
在当前版本的python中,DictWriter.writerows方法可以重新实现为:
def writerows(self, rowdicts):
return self.writer.writerows(map(self._dict_to_list, rowdicts))
# or:
#return self.writer.writerows(self._dict_to_list(row) for row in rowdicts)
它应该具有相同的行为,除了避免不必要的创建行列表.
内容总结
以上是互联网集市为您收集整理的python – csv.writer.writerows采用迭代器?全部内容,希望文章能够帮你解决python – csv.writer.writerows采用迭代器?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。