Last week, I was interviewed by ignite solution recruitment team, I really enjoyed every part of it. During the interview process, I was needed to attend an online test. There are only three more questions on the test. I want to share one of the interesting question on the test with this blog post. Here is the question,
Write a program that accepts a string on the command line and prints out the list of files within a folder (or subfolders) that have the string within them.
Solution:
Write a program that accepts a string on the command line and prints out the list of files within a folder (or subfolders) that have the string within them.
Solution:
import os,re,sys def fun(arg, dirname, fnmes): out_list = [] for fname in fnmes: filepath = os.path.join(dirname,fname) if os.path.isfile(filepath): fp = open(filepath ,'r') text = fp.read() fp.close() if re.search(arg,text): # print full path. Calling os.path.basename will # give us just the name. print filepath def main(): strg=sys.argv[1] os.path.walk('.', fun, strg) if __name__=='__main__': main()Here is a simple os.path.walk() example which walks your directory tree and returns the list of file names that contains the given string.
Here's my solution, with os.listdir():
ReplyDeleteimport os
def index(directory):
stack = [directory]
files = []
while stack:
directory = stack.pop()
for file in os.listdir(directory):
fullname = os.path.join(directory, file)
if search_term in fullname:
files.append(fullname)
if os.path.isdir(fullname) and not os.path.islink(fullname):
stack.append(fullname)
return files
search_term = input('Enter a (part of) file name for search:')
Modifying it to accepts a string on the command line only needs minimal corrections.
:( no identation :(
Deletenot clear why do you defined out_list in the function body
ReplyDelete