2015-04-17 156 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。有用。再快一點。我如何以表格格式生成輸出?就像我原來的表格格式。謝謝 ! –