2013-06-11 4 views
0

Я пытаюсь написать условие, основанное на том, является ли значение в столбце csv определенной строкой.Как проверить значение столбца в электронной таблице в Python

Это мой код, где я буду выполнять некоторые вещи в зависимости от того является содержание ячейки в столбце «Тип» А «Вопрос»:

f = open('/Users/samuelfinegold/Documents/harvard/edXresearch/snaCreationFiles/time_series/time_series.csv','rU') 
reader = csv.DictReader(f, delimiter=',') 

for line in reader: 
    if line['type'] == 'Question': 
     print "T" 

CSV:

Ошибка Я получаю: AttributeError: DictReader instance has no attribute '__getitem__'

post_id thread_id author_id post_content types  time  votes_up votes_down posters 
1   0   Jan  NULL   Question 3/1/12 10:45 5 1 Jan, Janet, Jack 
2   0   Janet NULL   Answer  3/1/12 11:00 2 1 Jan, Janet, Jack 
3   0   Jack NULL   Comment  3/2/12 8:00 0 0 Jan, Janet, Jack 
4   1   Jason NULL   Question 3/4/12 9:00 3 1 Jason, Jan, Janet 
5   1   Jan  NULL   Answer  3/7/12 1:00 3 1 Jason, Jan, Janet 
6   1   Janet NULL   Answer  3/7/12 2:00 1 2 Jason, Jan, Janet 
+0

более подробный код – oleg

+0

Вы уверены, что это код, вызывающий проблемы? Это ошибка, которую вы получили бы, если бы вы сделали 'reader ['type']' вместо 'line ['type']'. Добавьте 'print type (line), repr (line)', чтобы посмотреть, что это на самом деле. – DSM

+0

Когда я пишу 'for line in reader: print type (line)' он ничего не возвращает – goldisfine

ответ

2

Я положил данные, которые были указаны в разделенных запятыми файл CSV , Я затем запустил ваш код по предоставленным вам данным и получил KeyError за type, поэтому я изменил if line['type'] на if line['types'] и он сработал.

Мой код:

import csv 

f = open('test.csv','rU') 
reader = csv.DictReader(f,delimiter=',') 

for line in reader: 
    print line 
    if line['types'] == 'Question': 
     print 'The above line has type question' 

Мой выход:

{'thread_id': '0', 'posters ': 'Jan', None: ['Janet', 'Jack'], 'post_id': '1', 'post_content': 'NULL', 'time': '3/1/12 10:45', 'votes_down': '1', 'votes_up': '5', 'author_id': 'Jan', 'types': 'Question'} 
The above line has type question 
{'thread_id': '0', 'posters ': 'Jan', None: ['Janet', 'Jack'], 'post_id': '2', 'post_content': 'NULL', 'time': '3/1/12 11:00', 'votes_down': '1', 'votes_up': '2', 'author_id': 'Janet', 'types': 'Answer'} 
{'thread_id': '0', 'posters ': 'Jan', None: ['Janet', 'Jack'], 'post_id': '3', 'post_content': 'NULL', 'time': '3/2/12 8:00', 'votes_down': '0', 'votes_up': '0', 'author_id': 'Jack', 'types': 'Comment'} 
{'thread_id': '1', 'posters ': 'Jason', None: ['Jan', 'Janet'], 'post_id': '4', 'post_content': 'NULL', 'time': '3/4/12 9:00', 'votes_down': '1', 'votes_up': '3', 'author_id': 'Jason', 'types': 'Question'} 
The above line has type question 
{'thread_id': '1', 'posters ': 'Jason', None: ['Jan', 'Janet'], 'post_id': '5', 'post_content': 'NULL', 'time': '3/7/12 1:00', 'votes_down': '1', 'votes_up': '3', 'author_id': 'Jan', 'types': 'Answer'} 
{'thread_id': '1', 'posters ': 'Jason', None: ['Jan', 'Janet'], 'post_id': '6', 'post_content': 'NULL', 'time': '3/7/12 2:00', 'votes_down': '2', 'votes_up': '1', 'author_id': 'Janet', 'types': 'Answer'} 

Причина у вас есть ключ называется None потому, что в колонке плакатов данные уже с разделителями-запятыми, поэтому только значение кулак в колонке будет назначен ключ «плакаты»

Я все еще не уверен, почему вы получаете attribute error, но с простым ча nge к вашему коду, это сработало для меня.

0

может быть, вы должны проверить, если ваши данные имеет строку заголовка с помощью

has_header(sample) 
+0

Я не думаю, что это проблема – goldisfine

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