2015-04-17 157 views
1

我想导入CSV文件到Python。我在这里有两个问题。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行。

+0

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

回答

2

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

+0

嗨,非常感谢。我想我犯了一个愚蠢的错误。在Excel中,Row表示水平线,但在Python中,Row表示垂直线。那么,我只想看到csv数据的前几行水平线。我能做些什么呢?再次感谢。 –

+0

我相信freq是列表的列表? (8):print freq [i]'? – Marek

+0

@Marek,freq是您无法编入索引的阅读器对象。 –

1

如果你只是想行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) 

或拨打接下来跳过第一行之后的读者对象:

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) 
+0

非常感谢Padraic。再快一点。 –

+0

@TristanSun,当然,问题是什么? –

+0

非常感谢Padraic。有用。再快一点。我如何以表格格式生成输出?就像我原来的表格格式。谢谢 ! –