我有一个RSS提要,我想从中提取数据,进行处理,然后将其保存到CSV文件中。 RSS feed刷新率是一个大窗口,从1分钟到几个小时不等,一次只能容纳100个项目。因此,为了捕获所有内容,我希望每分钟运行我的脚本。问题是如果脚本在提要更新之前运行,我将获取过去的数据,从而导致将重复数据添加到CSV。
我尝试使用提到的示例here进行查看,但始终出错。
数据流: RSS Feed-> Python脚本-> CSV文件
以下示例数据和代码:
从CSV采样数据:
gandcrab,acad5fc7ebe8c6979d98cb8537e3a247,18bb2c3b82649314dfd45a379058869804954276,bf0ac94c6ae6f1ecfcccc049ae2373bfc659b2efb2e48e824e2e78fb43b6ebef,54,C
从列表中采样数据:
zeus,186e84c5fd7da7331a62f1f13b1f4608,3c34aee767859fd75eb0c8c701716cbfd5655437,05c8e4f01ec8d4e6f4595db93bbcc0f85386c9f1b82b5833d983c9092640573a,49,C
比较代码:
if trends_f.is_file():
with open('trendsv3.csv', 'r+', newline='') as csv_file:
h_reader = csv.reader(csv_file)
next(h_reader) #skip reading header of csv
#should i load the csv into a list then compare it with diff() against the other list?
#or is there an easier, faster, more efficient way?
答案 0 :(得分:0)
我建议将所有内容下载到CSV中,然后分批(例如每晚)进行重复数据删除,以针对您的工作生成新的“干净” CSV。
要进行重复操作,请使用pandas库加载数据,然后可以对数据使用功能drop_duplicates
。
http://pandas.pydata.org/pandas-docs/version/0.17/generated/pandas.DataFrame.drop_duplicates.html
答案 1 :(得分:0)
从提要中添加ID似乎使事情最容易检查。感谢@blhsing提及这一点。结束了将csv中的ID读取到列表中,并对照此检查新数据的ID。也许有一种更快,更有效的方法,但这对我有用。
保存到csv之前检查其代码:
if trends_f.is_file():
with open('trendsv3.csv', 'r') as csv_file:
h_reader = csv.reader(csv_file, delimiter=',')
next(h_reader, None)
for row in h_reader:
csv_list.append(row[6])
csv_file.close()
with open('trendsv3.csv', 'a', newline='') as csv_file:
h_writer = csv.writer(csv_file)
for entry in data_list:
if entry[6].strip() not in csv_list:
print(entry[6], ' is not in the list, saving ', entry[6],' to the list')
h_writer.writerow(entry)
else:
print(entry[6], ' is in the list')
csv_file.close()