在看Python Data Visualization Cookbook 这本书(基于python2),开始时读取csv文件头的时候出现问题。查了资料,又是python3的问题,从这个链接找到答案。

书中源码是这样的:

 

  

import csv

filename = 'ch02-data.csv'
data = []
try:
with open(filename) as f:
reader = csv.reader(f)
#注意这里的缩进应该是书的印刷错误
   header = reader.next()
   data = [row for row in reader]
except:
...略...

  开始在python3运行报错如下:

Traceback (most recent call last):
File "F:\Techonolgoy\Python\file\blog\csv_open.py", line 8, in <module>
header = reader.next()
AttributeError: '_csv.reader' object has no attribute 'next'

  查资料发现在python3里面,reader已经没有了next属性。python3中用力如下:

import csv
with open('stocks.csv') as f:
f_csv = csv.reader(f)
headers = next(f_csv)
for row in f_csv:
# Process row
...

  上文提到过,这里书的缩进在印刷上可能有问题(header和data语句应该在with语句块里面)。我按照原缩进,在python2和3两种环境下测试的时候,报同样的错如下:

Traceback (most recent call last):
File "F:\Techonolgoy\Python\file\blog\csv_open.py", line 8, in <module>
header = next(reader)
ValueError: I/O operation on closed file.

  于是,再次修改代码,python3版本完整代码如下(python2只需要将缩进改正即可,直接用下面的代码亦可)

import csv

filename = 'ch02-data.csv'
data = []
try:
with open(filename) as f:
reader = csv.reader(f)
header = next(reader)
data = [row for row in reader]
except csv.Error as e:
print("Error reading CSV file at line %s: %s"%(reader.line_num, e)) if header:
print(header)
print("=====================")
for datarow in data:
print(datarow)

  成功输出结果:

['day', 'ammount']
=====================
['2013-01-24', '323']
['2013-01-25', '233']
['2013-01-26', '433']
['2013-01-27', '555']
['2013-01-28', '123']
['2013-01-29', '0']
['2013-01-30', '221']

  

 

我与python3擦肩而过(二)—— csv文件头哪去啦?的更多相关文章

  1. PE文件解析器的编写(二)——PE文件头的解析

    之前在学习PE文件格式的时候,是通过自己查看各个结构,自己一步步计算各个成员在结构中的偏移,然后在计算出其在文件中的偏移,从而找到各个结构的值,但是在使用C语言编写这个工具的时候,就比这个方便的多,只 ...

  2. PE文件格式详解,第二讲,NT头文件格式,以及文件头格式

    PE文件格式详解,第二讲,NT头文件格式,以及文件头格式 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) PS:本篇博客 ...

  3. Python处理Excel生成CSV文档

    Python是一种解释型的.动态数据类型的.面向对象的高级程序设计语言.拥有丰富的处理数据和文本类库,并且得益于它是一种解释型的语言,在程序修改和功能扩展上,可以很容易做到大规模的调整.综合考虑Pyt ...

  4. 在Linux 安装Python3.5.6详细文档!!!!

    在Linux 安装Python3.5.6详细文档!!!! 1.安装相关依赖库(工具包) yum install gcc patch libffi-devel python-devel  zlib-de ...

  5. 在py文件中设置文件头

    在写python文件的时候有时需要记录作者.创建时间等时间,因此可以给python文件设置文件头,这里以PyCharm为例介绍设置步骤: 1. 打开PyCharm,依次点击Setting-----Ed ...

  6. pycharm新建py文件时,自动补充文件头注释信息

    步骤: 1.File -->Settings 2.选择 File and Code Templates -> Files -> Python Script 文件头注释信息代码样式: ...

  7. python3.6环境部署文档

    python3.6环境部署文档   内容 Linux部署Python3.6环境 Mac部署Python3.6环境 Window10部署Python3.6环境 Pycharm安装 1. Linux部署P ...

  8. 【转】python通过文件头判断文件类型

    刚刚看到一个好玩的程序,拉过来.原文地址:https://www.ttlsa.com/python/determine-file-type-by-the-file-header/ 侵权删. ===== ...

  9. DEX文件解析---1、dex文件头解析

    DEX文件解析---1.dex文件头解析 一.dex文件     dex文件是Android平台上可执行文件的一种文件类型.它的文件格式可以下面这张图概括:     dex文件头一般固定为0x70个字 ...

随机推荐

  1. HTML5自学笔记[ 24 ]canvas绘图之星空草地

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. python中的异常处理

    主要用到 try...except...raise...finally... 1. try...except... try: for i in range(1, 1000): print i time ...

  3. 分形树Fractal tree介绍——具体如何结合TokuDB还没有太懂,先记住其和LSM都是一样的适合写密集

    在目前的Mysql数据库中,使用最广泛的是innodb存储引擎.innodb确实是个很不错的存储引擎,就连高性能Mysql里都说了,如果不是有什么很特别的要求,innodb就是最好的选择.当然,这偏文 ...

  4. 为什么 Node.js 这么火,而同样异步模式 Python 框架 Twisted 却十几年一直不温不火?

    twisted是一个强大的异步网络框架,应用的面也非常广,但是没有这几年才出现的Node.js火,社区.文档也是很少可怜我觉得二者其实在本质上差不多,而且python使用起来还是比较容易一些的 匿名用 ...

  5. The APR based Apache Tomcat Native library 异常解决办法

    tomat在linux服务器上启动报The APR based Apache Tomcat Native library which allows optimal performance in pro ...

  6. LoadRunner 文本检查点使用

    在测试时,我们可以根据文本检查点判断事务是否执行正确.   我们在启动流程时,成功返回:   我们检查这个响应结果是否有. int i=0; i=web_reg_find("Text=\&q ...

  7. android 启动时的短暂黑屏解决

    http://blog.csdn.net/lonely_fireworks/article/details/22291835 http://www.cnblogs.com/henanjing/arch ...

  8. C#.NET SQL数据库备份与还原解决方案

    C#.NET SQL数据库备份与还原解决方案http://www.csframework.com/archive/1/arc-1-20110924-1841.htm 开发框架V2.2(快速开发版)系统 ...

  9. bzoj 2241: [SDOI2011]打地鼠

    #include<cstdio> #include<iostream> using namespace std; ][],b[][],ans,sum; void pan(int ...

  10. Json数据,日期的转换

    using (SQLiteConnection con = new SQLiteConnection(Constants.DATA_SOURCE)) { con.Open(); using (SQLi ...