我有一个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()
答案 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)
给定一个包含此内容的文件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