csv.writer仅附加包含新数据的csv文件

时间:2017-05-03 19:01:11

标签: python python-3.x csv

我有一个脚本,用于从网站上抓取数据并将其存储到电子表格中

with open("c:\source\list.csv") as f:
  for row in csv.reader(f):
    for url in row:
      r = requests.get(url)
      soup = BeautifulSoup(r.content, 'lxml')
      tables = soup.find('table', attrs={"class": "hpui-standardHrGrid-table"})
          for rows in tables.find_all('tr', {'releasetype': 'Current_Releases'})[0::1]:
        item = []
        for val in rows.find_all('td'):
          item.append(val.text.strip())
      with open('c:\output_file.csv', 'a', newline='') as f:
        writer = csv.writer(f)
        writer.writerow({url})
        writer.writerows(item)

到目前为止,当这个脚本运行时,大约有50个新行被添加到CSV文件的底部(与附加功能完全相同)但我希望它做的是确定是否有重复的条目在CSV文件中跳过它们,然后更改不匹配项。

我觉得这应该是可能的,但我似乎无法想到一种方式

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果不从CSV文件中读取数据,则无法执行此操作。另外,为了改变错配",你只需要重写它们。

f = open('c:\output_file.csv', 'w', newline='')
writer = csv.writer(f)

for item in list_to_write_from:
    writer.writerow(item)

在此,您假设list_to_write_from将包含您需要的最新数据形式。

答案 1 :(得分:0)

我找到了解决此问题的方法,因为提供的答案对我不起作用

我补充说:

if os.path.isfile("c:\source\output_file.csv"):
    os.remove("c:\source\output_file.csv")

在我的代码的顶部,因为这将检查该文件是否存在,并删除它,只是为了稍后用最新的信息重新创建它。这是一种管道胶带的做法,但它有效。