如何从python中的csv文件中检索特定条目

时间:2015-05-26 13:14:58

标签: python csv

我有一个CSV文件rsvp1.csv

                _id  event_id  comments
                 1 |  x      | hello..
                 2 |  y      | bye
                 3 |  y      | hey
                 4 |  z      | hi

我的问题是:
对于每个事件,我如何将注释写入单独的文本文件?

以下代码存在一些错误:

import csv

with open('rsvps1.csv','rU') as f:
    reader = csv.DictReader(f, delimiter=',')
    rows = list(reader)
fi = open('rsvp.txt','wb')
k=0
for row in rows:
  if k == row['event_id']:
    fi.write(row['comment']+"\n")
  else:
    fi.write(row['event_id']+"\t")
    fi.write(row['comment']+"\n")
    k= row['event_id']
f.close()
fi.close()

3 个答案:

答案 0 :(得分:0)

我建议您使用pandas作为导入工具。它创建了csv文件的清晰数据结构,类似于MS Excel中的电子表格。然后,您可以使用iterrows循环播放您的event_id并处理您的评论。

import pandas as pd

data = pd.read_csv('rsvps1.csv', sep = ',')
for index, row in data.iterrows():
       print(row['event_id'], row['comment') #Python 3.x

但是,我不确定你要在文件中写什么。只是对所有event_id的评论?完整的评论'列可以通过

导出到单独的文件中
data.to_csv('output.csv', columns = ['comment'])

根据评论的其他信息:

如果只想保存具有相同event_id的某些注释,则必须首先选择相应的行。这是由

完成的
selected_data = data[data['event_id'] == 'x']

表示event_id' x'。 selected_data现在包含的数据框只包含具有' x'在' event_id' -column中。然后,您可以循环遍历此数据框,如上所示。

答案 1 :(得分:0)

我认为最好忘记你正在使用csv文件并将其视为普通文件,您可以在其中使用以下内容。

with open('file.csv', 'r') as f:
    lines = f.readlines()
for line in lines:
    if not line.startswith('_id'):
        line_values = line.split(',')
        with open('%s.txt' % line_values[1], 'a') as fp:
            fp.write(line_values[2] + '\n')

答案 2 :(得分:0)

拆分csv文件

给定一个包含此内容的文件rsvps1.csv

_id,event_id,comments
1,x,hello
2,y,bye
3,y,hey
4,z,hi

此:

import csv
import itertools as it
from operator import itemgetter

with open('rsvps1.csv') as fin:
    fieldnames = next(csv.reader(fin))
    fin.seek(0)
    rows = list(csv.DictReader(fin))

for event_id, event in it.groupby(rows, key=itemgetter('event_id')):
    with open('event_{}.txt'.format(event_id), 'w') as fout:
        csv_out = csv.DictWriter(fout, fieldnames)
        csv_out.writeheader()
        csv_out.writerows(event)

将其分成三个文件:

event_x.txt

_id,event_id,comments
1,x,hello

event_y.txt

_id,event_id,comments
2,y,bye
3,y,hey

event_z.txt

_id,event_id,comments
4,z,hi

根据您的需要调整输出。

仅评论

如果您不希望将csv作为输出,则会变得更简单:

import csv
import itertools as it
from operator import itemgetter

with open('rsvps1.csv') as fin:
    rows = list(csv.DictReader(fin))

for event_id, event in it.groupby(rows, key=itemgetter('event_id')):
    with open('event_{}_comments.txt'.format(event_id), 'w') as fout:
        for item in event:
            fout.write('{}\n'.format(item['comments']))

现在event_y_comments.txt有以下内容:

bye
hey