Python Jumpstart by Building 10 Apps Transcripts
Chapter: App 8: File Searcher App
Lecture: Sketching out the search app
0:01 So let's just take a moment and sketch out the flow of this application just to build a skeleton as we always do.
0:07 So, we have a main() method, and we'll do something here and of course we'll use the live template from main() to call it down here, like so,
0:14 from PyCharm, and then, the next thing we want to do of course we are going to say define print header, what we need to do is ask the user
0:21 hey what directories subtree you want to search and what do you want to search for, so those are the next two things we are going to need,
0:27 we'll say get_folder_from_user(), and similarly we'll say get_search_text_from_user(). then let's just define a search_file() method here,
0:38 and we'll figure out the parameters in a minute, ok, we'll reformat so we are all good, via pep 8 and let's start writing,
0:45 so print_header(), you guys know this, this is old hat by now, so we'll just fly through it, next we are going to get a folder from the user,
1:00 we'll say get_folder_form_user() and let's just do a quick little test like if they enter nothing we would rather not have our app crash
1:07 we'll just say hey search that, moreover, if they enter folder that doesn't exist, we'd also want to build the deal with this so just do a test,
1:17 and we'l leverage the truthiness of strings so we'll say if not folder, print something like sorry we can't search that location,
1:26 now notice here is a little single quote, this is one of those times where double quote strings are nice and handy
1:31 and then we'll just exit out of here. Next thing is we'll get text we'll say get the text from the user
1:37 and basically exactly the same deal here boom, I can't search for nothing, notice PyCharm has these grayed out
1:45 and that's because it knows there is no return value from that method and yet we are trying to store in a variable, it will not crush,
1:51 it will give us the implicit return none but that is going to be highly unuseful for us, that is kind of what the warning is,
1:58 now finally we want something like search file and over here we'll say we want to search the folder and the text.
2:04 Now, I don't really like this name so much, I'd rather say search files or search folders, something like that so we can hit control t and rename this
2:12 and go I want to search folders, like that, and do the refactoring, and down here and if there was 100 files all potentially leveraging this
2:21 and docstrings leveraging and so on, all of that would have been fixed, now we need our folders and text of course, excellent,
2:29 so these should be pretty easy to write, let's just come here and pull this out,
2:33 now we are going to do a little more than just get the text that is the folder, we are actually going to verify it.
2:39 So ask the user what folder do you want to search, then we'll say if not folder: so for some reason it came back empty
2:44 I don't think it can ever come back as none
2:46 but let's just verify it, let's little safe and we'll say or if possibly the folder is just white space, right,
2:54 so in either case we'll just return none so we have nothing, there is no folder and that will trigger remember up here
3:02 that will trigger this and say no, it doesn't work. Next, let's verify that this directory exists and that we have access to it.
3:10 Again, back to our OS.path.exists, now we can be little better, we can say isdir in case they put a file
3:18 and we are trying to search through subdirectories, or something like this, maybe we'd write our app to behave differently
3:24 if you give it a file versus a folder, but we are not doing that right now, so we are just going to say if it's not a directory
3:31 we'll just return none and then finally, let's clean this up a little bit and say we'll return OS.path.absolutepath()
3:38 so we have a nice absolute path for a folder instead of something relative, as you will see having an absolute path is helpful for later on.
3:46 Next, let's just get some search text here, we'll say text = some sort of input again, we'll ask what are you searching for and then we'll give
3:55 a little warning that says single phrases only, because we are not going to do like words that mean and breaking into parts
4:02 we are just going to do basic substring searches, that's an interesting app to write but it's not the focus that we are really trying to get here.
4:08 So we'll just return text. All right, it looks like things are going pretty well here,
4:14 now let's just finally do this and just do a little print statement just to show everything is hanging together,
4:18 print would search this place for that. So let's run ti really quick, let's just search the current directory,
4:27 it looks like I made a mistake, let's see here, not folder, that should be or not strip, ok, perfect, ok let's try again,
4:38 I want to search the current location, and I am searching for the word cats, so we would search/users/screencaster/desktop_08_file seracher for cats.
4:47 Perfect, so we have kind of all this parts of like user input and everything completely done, and now
4:52 it's just a matter of implementing the search method.