我有一个看起来像这样的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的新手,在这方面的任何帮助将不胜感激,谢谢!!
答案 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
给出一切但是与正则表达式匹配的行