如果包含某个单词,如何从csv中删除一行?

时间:2015-05-18 23:27:41

标签: python csv lines

我有一个看起来像这样的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

我想知道如果删除一行,如果它包含单词" external"?

我在SO上看到另一个post来解决一个非常类似的问题,但我完全不了解......

我尝试使用这样的东西(如链接帖子中所述):

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)

文本文件只保留了一个单词" external"但它没有用......我不明白为什么。

程序将运行,并且将生成output.txt,但没有任何内容会改变,并且没有" external"被拿走了。

我使用Windows和python 3.4,如果它有所作为。

对不起,如果这看起来像一个非常简单的问题,但我是python的新手,在这方面的任何帮助将不胜感激,谢谢!!

3 个答案:

答案 0 :(得分:2)

看起来你在分割线后抓住了第一个元素。根据您的示例CSV文件,这将为您提供日期。

你可能想要的东西(再次,假设示例是它总能工作的方式)是抓住第3个元素,所以像这样:

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

但是,正如其中一条评论所说,这不一定是傻瓜式的。您假设没有单个单元格会有逗号。基于您的示例,这可能是一个安全的假设,但通常在处理CSV文件时,我建议使用Python csv module

答案 1 :(得分: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)

答案 2 :(得分:1)

如果你可以使用其他东西然后python,grep会像这样工作:

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

只会给你与正则表达式匹配的行,而:

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

给出一切但是与正则表达式匹配的行