2015-05-18 3 views
1

У меня есть файл CSV, который выглядит примерно так:Как удалить строку из csv, если она содержит определенное слово?

2014-6-06 08:03:19, 439105, 1053224, Front Entrance 
    2014-6-06 09:43:21, 439105, 1696241, Main Exit 
    2014-6-06 10:01:54, 1836139, 1593258, Back Archway 
    2014-6-06 11:34:26, 845646, external, Exit 
    2014-6-06 04:45:13, 1464748, 439105, Side Exit 

Я задавался вопросом, как удалить строку, если она включает в себя слово «внешний»?

я увидел еще post на SO, который выступил на очень похожий вопрос, но я совсем не понимаю ...

Я пытался использовать что-то вроде этого (как объяснено в связанном должности):

TXT_file = 'whatYouWantRemoved.txt' 
CSV_file = 'comm-data-Fri.csv' 
OUT_file = 'OUTPUT.csv' 

## From the TXT, create a list of domains you do not want to include in output 
with open(TXT_file, 'r') as txt: 
    domain_to_be_removed_list = [] 

## for each domain in the TXT 
## remove the return character at the end of line 
## and add the domain to list domains-to-be-removed list 
for domain in txt: 
    domain = domain.rstrip() 
    domain_to_be_removed_list.append(domain) 


with open(OUT_file, 'w') as outfile: 
    with open(CSV_file, 'r') as csv: 

     ## for each line in csv 
     ## extract the csv domain 
     for line in csv: 
      csv_domain = line.split(',')[0] 

      ## if csv domain is not in domains-to-be-removed list, 
      ## then write that to outfile 
      if (csv_domain not in domain_to_be_removed_list): 
       outfile.write(line) 

В текстовом файле только одно слово «внешнее», но оно не сработало ... и я не понимаю, почему.

Что произойдет, когда программа запустится, и будет выведено output.txt, но ничего не изменится, и строки с «внешним» не будут удалены.

Я использую Windows и python 3.4, если это имеет значение.

Извините, если это похоже на очень простой вопрос, но я новичок в python, и любая помощь в этой области будет принята с благодарностью, спасибо!

+0

Просто интересно - вам нужно делать это на питоне? есть множество инструментов командной строки, которые делают такие вещи ... grep, кто-нибудь? – rmalchow

+0

Похоже, вы разделяете точку с запятой вместо запятой? Кроме того, для справки, PEP говорит, что вы должны использовать 'X не в Y', а не' not X in Y' –

+0

Какая ошибка у вас возникла? – bakkal

ответ

2

Похоже, вы захватываете первый элемент после того, как разделите линию. Это даст вам дату, в соответствии с вашим примером CSV-файла.

То, что вы, вероятно, хотите вместо этого (опять же, при условии, пример то, как он всегда будет работать), чтобы захватить 3-й элемент, так что-то вроде этого:

csv_domain = line.split(',')[2] 

Но, как один из комментариев сказал , это не обязательно доказательство дурака. Вы предполагаете, что ни одна из отдельных ячеек не будет иметь запятую. Основываясь на вашем примере, который может быть безопасным предположением, но в целом при работе с файлами CSV я рекомендую работать с Python csv module.

+0

Спасибо, я только что понял, что это сработало !!!! – ocean800

+0

И да, на самом деле я точно знаю, что у меня не будет «,» в отдельной камере, но спасибо за указание на это! Я проверю модуль csv. – ocean800

1

, если вы можете пойти с чем-то другим то питона, Grep будет работать так:

grep file.csv "some regex" > newfile.csv 

даст вам только те строки, которые соответствуют регулярному выражению, в то время как:

grep -v file.csv "some regex" > newfile.csv 

дает все НО строки, соответствующие регулярному выражению

+0

Спасибо! Я пробовал это, но в итоге «grep не распознан как внутренняя или внешняя команда». Это потому, что grep не работает в окнах, правильно? – ocean800

+0

ну, да ... и нет. grep недоступен для окон из коробки. вы можете, однако, установить его – rmalchow

2

Перенаправить вывод в новый файл. Он предоставит вам каждую строку, кроме тех, которые содержат «внешние»

import sys 
import re 

f = open('sum.csv', "r") 
lines = f.readlines() 

p = re.compile('external') 

for line in lines: 
    if(p.search(line)): 
     continue 
else: 
    sys.stdout.write(line) 
+0

Спасибо, что это сработало очень хорошо! – ocean800

Смежные вопросы