2017-05-03 25 views
0

我有一個用來從一個網站,並將其存儲數據刮成電子表格csv.writer附加一個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) 

截至目前,該腳本運行時的腳本,在CSV文件的底部添加了大約50條新行(完全可以使用附加功能),但是我想要做的是確定CSV文件中是否存在重複條目並跳過它們,然後更改不匹配項。

我覺得這應該是可能的,但我似乎不能想辦法

有什麼想法?

+1

不要通過用您的問題的答案替換它來解決您的問題。它不再是任何意義上的問題,所以我恢復了舊版本。如果您確信自己的解決方案爲您提供的答案增加了某些內容(在這種情況下,您不應該這樣做),然後針對自己的問題創建一個答案,解釋如何解決問題。但留下的問題是;編輯是爲了澄清問題,而不是讓它消失。 – alexis

回答

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將包含你所需要的數據的最新形式。

+0

要「改變不匹配」,唯一的方法是清除CSV並再次寫出。 – alexis

+0

是的,不幸的。 – Antimony

+0

Glargh ...將'a'更改爲'w'的問題是,在我的循環中,它導致它只寫1行文本,而不是30 ... 我會嘗試使用你的if循環,並看看這是否我需要它。 謝謝! –

0

我找到了一個解決此問題的是爲我提供

沒有工作的答案,我補充說:

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

爲了我的代碼的頂部,因爲這會檢查是否該文件存在並刪除它,只是稍後用最新的信息重新創建它。這是一種管道膠帶做事的方式,但它的工作原理。

相關問題