python怎么删除包含指定中文的行 50

需要用python写一个删除匹配内容的小文件,虽然excel、sed之类的也能做,但是真的需要python来完成。自己鼓捣了半天没弄出来,希望能请python老鸟帮忙解决... 需要用python写一个删除匹配内容的小文件,虽然excel、sed之类的也能做,但是真的需要python来完成。自己鼓捣了半天没弄出来,希望能请python老鸟帮忙解决一下,不胜感激。

有2个文件,分别是:del.txt和input.txt
del.txt包含了需要匹配的字符,有中文有英文,一行一个,示例如下:
张三
lucy
input.txt内容是待处理的文字,一行一个,示例如下:
张三人很好
李四是学习委员
lucy很善良
张三的爸爸是科学家
lucy钢琴十级
lucy是英语课代表
李四和张三是好朋友

lina是lucy的妹妹
lina经常向李四请教数学

李四成绩很好
目的:
先从del.txt中读取内容,再从input.txt中删除匹配的行,将删除匹配字符的行保存为output.txt,已经删除的内容保存为deleted.txt
那么刚刚上述举例的最终处理结果,output.txt就是这样的:
李四是学习委员
lina经常向李四请教数学
包含了张三和lucy的所有内容被保存至deleted.txt

说明:del.txt里面的内容大概有5、6百,input.txt文件中大概有75万行数据,所以希望能考虑一下执行的效率。。。
具体文件以及要求已经传到百度网盘(http://pan.baidu.com/s/1i3yx4Qp)了,这么说起来太纠结了。。。囧。。。
展开
 我来答
毫无威严雷米喵
2014-07-18 · TA获得超过428个赞
知道答主
回答量:29
采纳率:0%
帮助的人:44.2万
展开全部
#!/usr/bin/env python
#coding=utf-8

def read_del_list(path):
    del_list = list()
    with open(path, 'w') as file_handle:
        for row in file_handle:
            del_list.append(row.strip())
    return del_list

def filte_file(from_file, to_file, del_list):
    with open(from_file) as file_handle_from:
        with open(to_file) as file_handle_to:
            for row in file_handle_from:
                if not any(key_word in row for key_word in del_list):
                    file_handle_to.write(row)

if __name__ == '__main__':
    del_list = read_del_list(r"del_list.txt")        #读取过滤规则
    filte_file(r"source.txt", "output.txt", del_list)#过滤文件
追问
呃,del_list.txt里面的内容被删除了,但是output.txt里面生成的文件却没有去除掉需要删除的内容。。。。
具体文件以及要求已经传到百度网盘(http://pan.baidu.com/s/1i3yx4Qp)了,这么说起来太纠结了。。。囧。。。
追答

对不起,忘记加打开模式

#!/usr/bin/env python
#coding=utf-8
 
def read_del_list(path):
    del_list = list()
    with open(path, 'r') as file_handle:
        for row in file_handle:
            del_list.append(row.strip())
    return del_list
 
def filte_file(from_file, to_file, del_list):
    with open(from_file, 'r') as file_handle_from:
        with open(to_file, 'w') as file_handle_to:
            for row in file_handle_from:
                if not any(key_word in row for key_word in del_list):
                    file_handle_to.write(row)
 
if __name__ == '__main__':
    del_list = read_del_list(r"del.txt")        #读取过滤规则
    filte_file(r"input.txt", "output.txt", del_list)#过滤文件
chaoningwang
2014-07-18 · TA获得超过682个赞
知道小有建树答主
回答量:806
采纳率:83%
帮助的人:892万
展开全部
fa=open('del.txt','rt')
fb=open('output.txt','rt')
fc=open('c.txt','wt')
a=set()
for line in fa:
a.add(line.strip())
fa.close()
for line in fb:
exist=False
for m in a:
if line.startswith(m):
exist=True
break
if exist: print('skip '+line)
else: fc.write(line)
fb.close()
fc.close()
这段代码是借用其他网友的,看了下没有错误,省的自己敲了,你看哪里不明白。或者你把自己的代码粘上来帮你检查也行。
追问
运行了一下,跟上面那位同学的代码一样,最后的输出的output.txt内容为空。具体文件以及要求已经传到百度网盘(http://pan.baidu.com/s/1i3yx4Qp)了,这么说起来太纠结了。。。囧。。。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
babykick
2014-07-18 · TA获得超过406个赞
知道小有建树答主
回答量:256
采纳率:0%
帮助的人:158万
展开全部
两个for循环跑吧。。。
追问
talk is cheap show me the code
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式