python 查找文件内容
2015-03-11 16:45 xiashengwang 阅读(4808) 评论(0) 编辑 收藏 举报输入查找的文件夹路径,要查找的内容关键字(可以指定多个),要查找的文件类型(可以是多个),搜索出符合条件的文件,并记录所有符合条件的行号及行内容。
写的感觉有点冗余,但好歹还能使用^-^,主要是方便手头工作。
# coding:utf8 import os from os.path import * # enter the search dir print r"""Search file tool(Ver1.0) dirpath /k keywords [/e fileextension] [/o resultfilepath] /k keyword you want to search /e file extension(.txt .java .cs etc...) /o the path of the result file you want to save example: e:\temp\py /k 'kw1' /e '.txt' e:\temp\py /k "kw1" "kw2" /e ".txt" ".cs" /o e:\temp\py\result.txt """ # Get user command. input = raw_input("> ") if input.find("/k") < 0: print "/k option must be input" exit(1) # Get the dir root_dir = input.split("/k")[0].strip() if not isdir(root_dir): print "First parameter must be a valid dir!" exit(1) # Get the keywords and file extension option = input.split("/k")[1].strip() if option.find("/e") < 0: key_words = [s.strip("\'\"") for s in option.split()] else: key_words = [s.strip("\'\"") for s in option.split("/e")[0].strip().split()] if option.find("/o") < 0: file_exts = [s.strip("\'\"") for s in option.split("/e")[1].strip().split()] else: file_exts = [s.strip("\'\"") for s in option.split("/e")[1].strip().split("/o")[0].strip().split()] search_filter = "Search dir:%s\n" % root_dir search_filter = search_filter + ("Search key words:%s\n" % " ".join(key_words)) if file_exts: search_filter = search_filter + ("Search file type:%s\n" % " ".join(file_exts)) print search_filter # Search file by the keyword result_files = {} for (dir_name, subdirs, files) in os.walk(root_dir): for file in files: filepath = os.path.join(dir_name, file) ext = os.path.splitext(filepath)[1] if file_exts and (ext not in file_exts): continue file = open(filepath) # Compare every lines of the file by the keywords for index, line in enumerate(file.readlines()): for keyword in key_words: if line.find(keyword) > 0: # Save matched line and line number match_line = "line:%d %s" % (index, line) if filepath not in result_files.keys(): result_files[filepath] = [] result_files[filepath].append(match_line) break file.close() print "Search finish!" # Output the search result if option.find("/o") >= 0: # Write result to file save_file_path = option.split("/o")[len(option.split("/o")) - 1].strip() save_file = open(save_file_path, "w") save_file.write(search_filter) summary = "find:%d files" % len(result_files.keys()) save_file.write("%s\n" % summary) for key, value in result_files.items(): save_file.write("%s\n" % key) for line in value: #print "type:", type(line) save_file.write("--%s" % line) save_file.close() else: # Show result in command window summary = "find:%d files" % len(result_files.keys()) print summary for key, value in result_files.items(): print "%s" % key for line in value: print "--%s" % line 直接运行,就可以提示你如何操作,第一个实用的python程序,记录一下。