2017-01-04 67 views
0

此:刪除CSV的某些行,就地

import csv 
with open('original.csv', 'rb') as inp, open('new.csv', 'wb') as out: 
    writer = csv.writer(out) 
    for row in csv.reader(inp): 
     if row[2] != "0": 
      writer.writerow(row) 
os.remove('original.csv') 
os.rename('new.csv', 'original.csv') 

允許刪除CSV的某些行。

是否有更Python的方式來刪除CSV文件的某些行,就地?(而不是創建一個文件,刪除原來的,重命名等)

回答

5

沒有更多的pythonic方法:你不能刪除文件中的東西。用你想要的東西寫出一個新文件,然後重命名它。

+0

您也可以從文件讀取,關閉它,進行必要的更改,然後使用更改覆蓋文件。 –

+0

@AndrewLamarra你能發表一個答案嗎? – Basj

0

我注意到你的代碼不會導入os模塊,即使你正在使用它。無論如何,這裏有一種方法可以在不使用該模塊的情況下完成您所需要的操作。

這將首先在讀取模式下打開以獲取數據,然後寫入模式以覆蓋。請注意,您需要將csv.reader(f)語句傳遞給list()函數,否則數據變量將僅指向CSV文件的內存地址,一旦關閉內容,您將無法對內容執行任何操作。 list()實際上會爲你複製信息。

import csv 

with open("original.csv", "rb") as f: 
    data = list(csv.reader(f)) 

with open("original.csv", "wb") as f: 
    writer = csv.writer(f) 
    for row in data: 
     if row[2] != "0": 
      writer.writerow(row)