Quendi
Quendi

Reputation: 3

Searching words from a file in another file

I have got 2 files:

I would like to create a third file "hits.txt" with all the lines from "access.log.13" that contains any of the words from the file "spiders.txt"

This is my little Frankeinstein:

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()

It doesn't work as i would like cause i only get hits when the line in bots.txt is exactly the same than any line in access.log.13. Thx

Upvotes: 0

Views: 218

Answers (2)

Jakub M.
Jakub M.

Reputation: 33827

You can do it in a more pythonish way:

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)

Or you can use even nicer comprehension:

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)

Upvotes: 1

Joonazan
Joonazan

Reputation: 1416

Replace the if with this:

if j.find(i) != -1

Upvotes: 0

Related Questions