Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中从csv文件检索特定条目_Python_Csv - Fatal编程技术网

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

如何在python中从csv文件检索特定条目,python,csv,Python,Csv,我有一个CSV文件rsvp1.CSV: _id event_id comments 1 | x | hello.. 2 | y | bye 3 | y | hey 4 | z | hi 我的问题是: 对于每个事件e,如何将注释写入单独的文本文件 以下代码有一些错误: impor

我有一个CSV文件
rsvp1.CSV

                _id  event_id  comments
                 1 |  x      | hello..
                 2 |  y      | bye
                 3 |  y      | hey
                 4 |  z      | hi
我的问题是:
对于每个事件e,如何将注释写入单独的文本文件

以下代码有一些错误:

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()

我建议您使用
pandas
作为导入工具。它为csv文件创建清晰的数据结构,类似于MS Excel中的电子表格。然后,您可以使用循环查看事件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
但是,我不确定您要在文件中写入什么。只是所有事件id的注释?完整的“注释”列可以通过以下方式导出到单独的文件中:

data.to_csv('output.csv', columns = ['comment'])

根据评论提供的其他信息:

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

selected_data = data[data['event_id'] == 'x']

对于事件_id'x'
selected_data
现在包含一个数据框,该数据框只保存在“event_id”列中有“x”的行。然后,您可以如上所示循环使用此数据帧。

我认为最好不要使用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')
拆分csv文件 给定包含以下内容的文件
rsvps1.csv

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

将其拆分为三个文件:

event_x.txt

_id,event_id,comments
1,x,hello
_id,event_id,comments
4,z,hi
event_y.txt

_id,event_id,comments
2,y,bye
3,y,hey
event_z.txt

_id,event_id,comments
1,x,hello
_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
包含以下内容:

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

我立即注意到的一件事是,您有
分隔符=”,“
当文件似乎使用了
的分隔符时
出现了一些错误
是一个相当模糊的错误描述。不,它是一个csv文件,所以它由,我只是用|来演示数据的表示方式。我可以将事件id和注释保存到文本文件中。但最后我想制作几个小文本文件,它们的名称为event_id,文本文件应该包含与该event_id对应的所有注释。对于所有event_id,我想将注释导出到名为event_id的文件中。