Python Jumpstart by Building 10 Apps Transcripts
Chapter: App 8: File Searcher App
Lecture: Improved search results
Login or
purchase this course
to watch this video and the rest of the course contents.
0:00
So it's time to improve the results that come out of here,
0:03
remember, we are just passing the actual lines of a bunch of files,
0:06
we don't really even know which ones those are,
0:09
we just start with the folder that have some kind of match,
0:11
so we want to bundle some information together about these matches,
0:14
now we could use classes and those are very powerful,
0:17
but really we just need things like what's the line number,
0:20
what's the text, what's the file name and so on.
0:23
So it turns out named tuples are perfect, so again,
0:27
we'll just use our collections of a SearchResult =
0:31
we want to use our collections.namedtuple()
0:34
and then the first thing is the type name
0:38
the second argument are basically the fields
0:42
so it will be file, file line and text,
0:45
let's say those are the three things that we are going to return there.
0:50
Now let's change this, so not just append a line but actually make results,
0:54
so we'll say m for match it's going to be a SearchResults()
0:59
and in here what are we going to add,
1:01
we want to say line = line I think I called it and file = filename
1:07
and the text = ... actually, text = line, that's the line of text
1:14
and I need the line number here,
1:18
so we have to compute this ourselves so way we are doing it but that's ok,
1:24
ok, so now we are going to append that and let's just run it again,
1:27
remember, these named tuples have decent output, ok,
1:31
we are going to search our books again,
1:33
and we are going to search for the word friends,
1:36
and here are a bunch of matches that have way more information,
1:39
so you can see we have the file is the Ulysses book
1:43
and these are the lines and we also have Tales of Two Cities and The Doll House,
1:46
they all talk about friends.
1:49
Ok, that works, but let's do a little bit nicer output so we can read it here,
1:52
let's go at the top where we are doing this print and for a little bit let's go ok, stop this,
1:58
what we are going to do is we are going to say print()
2:00
and we'll do something like this, there is a match
2:04
ok so we'll say match then we'll print out the file, the line and the actual match text,
2:09
let's run it again.
2:11
Same folder, this time let's search for happiness.
2:16
All right, so we have some matches,
2:18
it turns out in Ulysses on line 20899 rule of happiness of the better land- yes,
2:24
this is a much nicer output.
2:27
Now, something is funny like there is two lines here,
2:30
and yet we are only doing like one print on this
2:35
which is kind of unusual what is going on,
2:37
remember, when we read an individual line from the files
2:40
they actually have the new line on there so that new line is appearing here
2:44
and I'd rather take more control over the text rather than assume that
2:47
that's always going to be there so let's just say strip(),
2:50
now it could do an rstrip() just to get the stuff off the end or maybe
2:54
if there is white space you want to pull it to the font, anyway so let's do it this way.
3:00
Great, it looks like our searching is working perfectly.
3:07
Now remember, we are giving it this folder
3:09
and it turns out we are searching these files
3:11
but we are not searching Dracula or Adventure of Sherlock Holmes,
3:17
or anything like that, let's just prove that,
3:19
we come over here and say I want to search for Holmes,
3:23
well, Ulysses apparently has some place that talks about Sherlock Holmes
3:28
but we are not getting into that subdirectory.
3:31
And this is to be expected because we said if it's a directory ignore it,
3:35
there is a variety of ways in which we could solve this problem
3:38
but it turns out the most natural way to solve these hierarchical problems are
3:43
to use something called recursion,
3:45
so let's take a moment and go look at this concept
3:47
and then we'll come back and apply ti to our application.