首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从另一个文件中搜索单词

从另一个文件中搜索单词
EN

Stack Overflow用户
提问于 2013-05-13 12:13:58
回答 2查看 206关注 0票数 0

我有两个文件:

  • access .log.13:来自web服务器的简单访问日志。
  • bots.txt:包含蜘蛛和爬虫名称,每个名称位于不同的行中,例如: googlebot、mj12bot、百度等。

我想创建第三个文件"hits.txt“,其中包含”a.log.13“中的所有行,其中包含文件"spiders.txt”中的任何单词。

这是我的小弗兰克恩斯坦:

代码语言:javascript
复制
file_working = file("hits.txt", "wt")

file_1_logs = open("access.log.13", "r")
file_2_bots = open("bots.txt", "r")
file_3_hits = open("hits.txt", "a")

list_1 = arxiu_1_logs.readlines()
list_2 = arxiu_2_bots.readlines()

file_3_hits.write("Lines with bots: \n \n")

for i in list_2:
    for j in list_1:
     if i in j:          
         file_3_hits.write(j)

arxiu_1_logs.close()
arxiu_2_bots.close()

它不像我所希望的那样工作,因为只有当bots.txt中的行与as .log.13中的任何一行完全相同时,我才会被击中。Thx

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-13 12:25:51

你可以用一种更平淡的方式来做:

代码语言:javascript
复制
with open('spiders.txt') as fh:
    words = set(re.split(r'[ \n\r]+', fh.read())) # set of searched words

with open('access.log.13') as file_in, \
     open('hits.txt', 'w') as file_out:
    for line in file_in:
        if any(word in line for word in words): # look for any of the words
            file_out.write(line)

或者你可以使用更好的理解:

代码语言:javascript
复制
with open(...) as file_in, open (...) as file_out: # same as previously
    good_lines = (line for line in file_in if any(word in line for word in words))
    for good_line in good_lines:
        file_out.write(good_line)
票数 1
EN

Stack Overflow用户

发布于 2013-05-13 12:18:14

将if替换为:

代码语言:javascript
复制
if j.find(i) != -1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16521801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档