2016-04-28 59 views
4

我需要關於代碼的指導來編寫一個CSV文件,該文件在第一列[0]中刪除具有特定數字的行。我的腳本寫入一個文件,但它包含我正在刪除的行。我懷疑我的電子表格可能會被讀取爲一個長字符串而不是〜150行。創建從舊CSV中排除行的新CSV

import csv 

Property_ID_To_Delete = {4472738, 4905985, 4905998, 4678278, 4919702, 4472936, 2874431, 4949190, 4949189, 4472759, 4905977, 4905995, 4472934, 4905982, 4906002, 4472933, 4905985, 4472779, 4472767, 4472927, 4472782, 4472768, 4472750, 4472769, 4472752, 4472748, 4472751, 4905989, 4472929, 4472930, 4472753, 4933246, 4472754, 4472772, 4472739, 4472761, 4472778} 

with open('2015v1.csv', 'rt') as infile: 
    with open('2015v1_edit.csv', 'wt') as outfile: 
     writer = csv.writer(outfile) 
     for row in csv.reader(infile): 
      if row[0] != Property_ID_To_Delete: 
       writer.writerow(row) 

下面是數據: https://docs.google.com/spreadsheets/d/19zEMRcir_Impfw3CuexDhj8PBcKPDP46URZ9OA3uV9w/edit?usp=sharing

回答

3

您需要檢查,如果一個ID,轉換成整數設置爲整​​數, 包含在IDS中刪除。 只有在不包含該行的情況下才寫行。您將 第一列中的ID與要刪除的整個ID集進行比較。字符串是永遠 不等於一套:

>>> '1' != {1} 
True 

因此,你在你的輸出中的所有行。

變化:

if row[0] != Property_ID_To_Delete: 

到:

if int(row[0]) not in Property_ID_To_Delete: 

編輯

您需要拖車試圖將第一列條目轉換爲整數之前寫你infile第一的頭:

with open('2015v1.csv', 'rt') as infile: 
    with open('2015v1_edit.csv', 'wt') as outfile: 
     writer = csv.writer(outfile) 
     reader = csv.reader(infile) 
     writer.writerow(next(reader)) 
     for row in reader: 
      if int(row[0]) not in Property_ID_To_Delete: 
       writer.writerow(row) 
+0

它適合你嗎? –

+0

回溯(最近最後調用): 文件 「」,第7行,在 如果INT(行[0])不Property_ID_To_Delete: ValueError異常:無效字面對於int ()與基數10:'屬性Id' – JCM

+0

錯誤消息後,我一直在嘗試各種方法來更改Property ID列爲整數失敗。 – JCM