【问题标题】:DictReader is skipping two lines of my file?DictReader 正在跳过我的文件的两行?
【发布时间】:2015-11-17 18:23:09
【问题描述】:

我有一个 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 放入列表中??

【问题讨论】:

  • 文件是否有混合行结尾?我见过在 OS X 上创建的文件,其中标题行以 \r 结尾,因此标题和第一行被视为单行。
  • 我不完全确定.. 我怎样才能找到它??
  • 您可能需要在能够显示行尾的文本编辑器中打开文件。这将取决于您的操作系统。
  • 如果你有记事本++,你可以在文本文件中显示换行符/显示所有字符。如果你没有记事本++...获取记事本++:P
  • 我用记事本++打开它,在每一行的末尾都有“LF”粗体

标签: python list csv


【解决方案1】:

如果您的文件确实如您所描述的那样格式化,您可能需要在列名之间放置逗号

date, open, high, low

【讨论】:

  • 对不起,我的错误,实际上它们之间已经有逗号所有整个 csv 文件都用逗号分隔,甚至标题。
【解决方案2】:

我在互联网上找到了指向 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

【讨论】:

  • 非常感谢!我这样做了,它打印 2012-11-13 作为第一行:/ 我要再次下载文件,可能已经损坏..因为我的代码完全相同,除了我有很多功能,但这是需要修复的部分哈哈是的,这是一个家庭作业,我只是 python 的新手哈哈,但那不是我在其他网站上发布的,哈哈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
相关资源
最近更新 更多