比较列表与CSV文件

时间:2019-02-22 18:32:20

标签: python csv

我有一个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?

2 个答案:

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