DictReader正在跳过我的两行文件?

时间:2015-11-17 18:23:09

标签: python list csv

我有一个格式为:

的csv文件

date, open, high, low,..

22-11-14, 660.6, 15.1, 12.6

22-11-13, 569.6, 13.1, 10.2

22-11-12, 716.0, 18.6, 13.2

....

当用csv.DictReader打开文件,然后逐行读取数据时,它会跳过标题日期,打开等;但它也跳过了第一行数据?正在跳过日期22-11-14的数据,它从22-11-13开始? 这是我的代码,任何人都知道这是为什么以及如何解决它?

types = [("Date", str), ("Open", float), ("High", float),
     ("Low", float), ("Close", float), ("Volume", int), ("Adj Close", float)]

input_file = csv.DictReader(open("googlePrices.csv"))
dataList = []    
for rows in input_file:
    rows.update((key, conversion(rows[key])) for key, conversion in types))
    rows['Date'] = time.strptime(rows['Date'], '%Y-%m-%d')
    dataList.append(rows)

所以在datalist列表中,第一个元素是22-11-13的数据,然后从那里开始工作完美..但我需要将22-11-14放入列表?

2 个答案:

答案 0 :(得分:0)

如果您的文件确实按照您的描述进行了格式化,则可能需要在列名称之间加上逗号

date, open, high, low

答案 1 :(得分:0)

我在互联网上找到了指向googlePrices.csv文件的链接。我拿了你的基本脚本并在下面清理了一下:

import csv
import time

types = [("Date", lambda d: time.strptime(d, '%Y-%m-%d')), ("Open", float), ("High", float),
         ("Low", float), ("Close", float), ("Volume", int),
         ("Adj Close", float)]

with open("googlePrices.csv") as f:
    input_file = csv.DictReader(f)
    dataList = []    
    for rows in input_file:
        rows.update((key, conversion(rows[key])) for key, conversion in types)
        dataList.append(rows)

    print dataList[0]  # shows the first row

以下是文件的前两行:

$ head -n 2 googlePrices.csv
"Date","Open","High","Low","Close","Volume","Adj Close"
"2012-11-14",660.66,662.18,650.5,652.55,1668400,652.55

这是我的输出:

$ python reader.py
{'Volume': 1668400, 'Adj Close': 652.55, 'High': 662.18, 'Low': 650.5, 'Date': time.struct_time(tm_year=2012, tm_mon=11, tm_mday=14, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=319, tm_isdst=-1), 'Close': 652.55, 'Open': 660.66}

您显示的代码没有任何问题。文件中有不可打印的字符有问题,或者您的代码不是您粘贴的。我也非常确定这是某种家庭作业问题based on my Google-fu