python csv文件头_我与python3擦肩而过(二)—— csv文件头哪去啦?

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

书中源码是这样的:

importcsv

filename= 'ch02-data.csv'data=[]try:

with open(filename) as f:

reader=csv.reader(f)#注意这里的缩进应该是书的印刷错误

header =reader.next()

data= [row for row inreader]except:

...略...

开始在python3运行报错如下:

Traceback (most recent call last):

File "F:\Techonolgoy\Python\file\blog\csv_open.py", line 8, in

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

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']

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值