0

csv の列の値が特定の文字列であるかどうかに基づいて条件を記述しようとしています。

これは私のコードで、「タイプ」列のセルの内容が「質問」であるかどうかに基づいていくつかのことを実行します。

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
4

3 に答える 3

2

提供されたデータをコンマ区切りの CSV ファイルに入れ、提供されたデータに対してコードを実行してKeyErrorforを取得した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理由は、posters 列のデータが既にコンマで区切られているためです。したがって、列の最初の値のみにキー 'posters' が割り当てられます。

なぜあなたがattribute error.

于 2013-06-12T10:50:45.577 に答える
0

おそらく、データにヘッダー行があるかどうかを確認する必要があります

has_header(sample)
于 2013-06-11T14:28:49.083 に答える