2016-09-29 4 views
0

私はPythonで新しく、csvファイルを修正しようとするので、指定されたリストに従って特定のフィールドを持つ特定の行を削除できます。私の現在のコードで 私は削除したい行を取得しますが、私はそれを削除し、同じファイル(変更)に変更を保存することはできません。csvファイルの行全体を削除し、同じファイルに変更を保存する方法は?

import os, sys, glob 
import time ,csv 
# Open a file 
path = 'C:\\Users\\tzahi.k\\Desktop\\netzer\\' 
dirs = os.listdir(path) 
fileslst = [] 
alertsCode = ("42001", "42003", "42006","51001" , "51002" ,"61001" ,"61002","71001", 
      "71002","71003","71004","71005","71006","72001","72002","72003","72004", 
      "82001","82002","82003","82004","82005","82006","82007","83001","84001") 
# This would print the unnesscery codes 
for file in dirs: 
    if "ALERTS" in file.upper() : 
     fileslst.append(file) 
fileslst.sort() 

with open(fileslst[-1], 'rb') as csvfile: 
    csvReader = csv.reader(csvfile) 
    for row in csvReader: 
     for alert in alertsCode: 
      if any(alert in row[2] for s in alertsCode) : 
      print row 

答えて

3

リスト内包語を使用して、すべての行をリストに読み込み、不要な行を除外します。その後書き換え上書きするか、ファイルの内容置き換えモードでファイルw(書き込みモード)に行

with open(fileslst[-1], 'rb') as csvfile: 
    csvReader = csv.reader(csvfile) 
    clean_rows = [row for row in csvReader if not any(alert in row[2] for alert in alertsCode)] 
    # csvfile.truncate() 

with open(fileslst[-1], 'wb') as csvfile: 
    csv_writer = csv.writer(csvfile) 
    csv_writer.writerows(clean_rows) 
+0

読書のための理由があるとバイナリの書き込みを( ' 'rb''、 '' wb'')モード? –

+0

@ Ev.Kounis特に理由はありません。 OPの優先順位に従うだけで –

+0

がうまくいきます! 感謝しています。ありがとうございます。 –

関連する問題