zoukankan      html  css  js  c++  java
  • 我与python3擦肩而过(二)—— csv文件头哪去啦?

        在看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:TechonolgoyPythonfilelogcsv_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:TechonolgoyPythonfilelogcsv_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']
    

      

     

  • 相关阅读:
    第二周
    7月课程
    自定义线程池的创建
    jvm8内存模型和内存分配
    多线程中 CountDownLatch CyclicBarrier Semaphore的使用
    HashMap Hashtable TreeMap LinkedHashMap 分析
    HashSet LinkedHashSet TreeSet 分析
    ArrayList Vector LinkedList分析
    Java之流水号生成器实现
    mysql-mmm 部署高可用集群
  • 原文地址:https://www.cnblogs.com/buzhizhitong/p/5691405.html
Copyright © 2011-2022 走看看