【问题标题】:import CSV file to Python将 CSV 文件导入 Python
【发布时间】:2015-04-17 09:59:26
【问题描述】:

我正在尝试将 csv 文件导入 Python。我有两个问题。

Q1.我的代码是:

import csv
with open('highfrequency2.csv') as csvfile:
  freq=csv.reader(csvfile, delimiter=',')
  for row in freq:
    print(row[1],row[8])

但是这里有错误提示

IndexError:列表索引超出范围

Q2.我的数据输出看起来像

['WOSl.TQ', '02-Jan-14', '51:48.0', 'Quote', '', '']
['WOSl.TQ', '02-Jan-14', '51:48.0', 'Quote', '', '']
['WOSl.TQ', '02-Jan-14', '51:48.0', 'Quote', '', '']
['WOSl.TQ', '02-Jan-14', '51:48.0', 'Quote', '', ''] 
['WOSl.TQ', '02-Jan-14', '51:48.0', 'Quote', '', '']
.....
....

我必须使用'r'或'rb'函数来读取文件吗?

我想查看 CSV 文件的第 2 行和第 8 行。

【问题讨论】:

  • 如果是我做这个问题,我要做的第一件事就是运行 csvlint 以确保 csv 文件正确。

标签: python csv


【解决方案1】:

您的行有 6 个元素,您正在尝试打印第 2 个和第 9 个。好吧,后者不存在,因此列表索引超出范围(索引从 0 开始)。

【讨论】:

  • 您好,非常感谢。我想我犯了一个愚蠢的错误。在 excel 中,Row 表示水平线,但在 Python 中 Row 表示垂直线。好吧,我只想看看 csv 数据的前几行水平线。我能做些什么吗?再次感谢。
  • 我相信 freq 是一个列表列表?去for i in range(8): print freq[i]?
  • @Padraic Cunningham,我明白了,我没有验证我的假设。
【解决方案2】:

如果您只需要第 2-8 行,请在阅读器对象上使用 itertools.islice

import csv
from itertools import islice, izip

with open('highfrequency2.csv') as csvfile:
    freq = csv.reader(csvfile)
    # create islice object
    interest = islice(freq, 1, 8, None))
    # iterate over islice object getting row at a time
    for row in interest:
       print(row)

如果您只想要这两个特定行,请使用 6 个 step

 import csv
from itertools import islice, izip

with open('highfrequency2.csv') as csvfile:
    freq = csv.reader(csvfile)
    interest = islice(freq, 1, 8, 6))
    for row in interest:
       print(row)

或者跳过第一行后在阅读器对象上调用next:

import csv

with open('highfrequency2.csv') as csvfile:
    freq = csv.reader(csvfile)
    next(freq)
    # create generator expression
    interest = (next(freq) for _ in range(7))
    for row in interest:
       print(row)

或者使用枚举:

 import csv

with open('highfrequency2.csv') as csvfile:
    freq = csv.reader(csvfile)
    interest = (row for ind, row in enumerate(freq) if ind in {1,7})
    for row in interest:
       print(row)

【讨论】:

  • 非常感谢帕德莱克。又是一个快速的。
  • @TristanSun,当然,有什么问题?
  • 非常感谢帕德莱克。有用。只是另一个快速的。如何生成表格格式的输出?就像我原来的表格格式一样。谢谢!
  • 你的意思是 csv 文件吗?
  • 我使用了您的代码,输出全部汇集在一起​​。我只想逐行查看输出。有没有办法做到这一点?就像我原来的桌子一样。谢谢!
猜你喜欢
  • 2019-02-23
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 2016-07-09
  • 2017-02-15
  • 2018-10-19
  • 1970-01-01
  • 2017-08-05
相关资源
最近更新 更多