2015-04-17 2 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', '', ''] 
..... 
.... 

Должен ли я использовать «г» или функции «» Р.Б. при чтении файла?

Я хочу видеть 2-ю и 8-ю строки CSV-файла.

+0

Первое, что я хотел бы сделать, если бы я делал эту проблему, - запустить csvlint, чтобы убедиться, что файл csv верен. – Marichyasana

ответ

2

ваш ряд имеет 6 элементов, и вы пытаетесь напечатать 2-й и 9-й. ну, последнее не существует, поэтому индекс списка выходит за пределы диапазона (индексирование начинается с 0).

+0

Привет, спасибо. Думаю, я сделал глупую ошибку. В excel строка Row означает горизонтальную линию, но в Python Row означает вертикальную линию. Ну, я просто хочу увидеть первые несколько горизонтальных строк данных csv. Что-нибудь, что я мог сделать по этому поводу? Еще раз спасибо. –

+0

Я верю, что freq - это список списков? просто перейдите 'for i в диапазоне (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) 

Если вы просто хотите, чтобы эти две специальные строки использовать step из 6:

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) 

Или нас in enumerate:

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

Огромное спасибо Падре. Еще один быстрый. –

+0

@TristanSun, конечно, в чем проблема? –

+0

Огромное спасибо Падре. Оно работает. Еще один быстрый. Как я могу сгенерировать вывод в формате таблицы? Как и мой оригинальный формат таблицы. Благодаря ! –

Смежные вопросы