python 查找文件内容

输入查找的文件夹路径,要查找的内容关键字(可以指定多个),要查找的文件类型(可以是多个),搜索出符合条件的文件,并记录所有符合条件的行号及行内容。

写的感觉有点冗余,但好歹还能使用^-^,主要是方便手头工作。

# 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程序,记录一下。
时间: 2024-08-06 05:53:59

python 查找文件内容的相关文章

python自定义查找文件内容

#!/usr/bin/env python#coding:utf8#此脚本为查找递归目录下所有文件匹配的内容 import os,sys,tab def paths(path):        list_path=os.walk(path)        all_file=[]        for p,d,fl in list_path:                for f in fl:                        pfile=os.path.join(p,f)    

Linux里如何查找文件内容

Linux查找文件内容的常用命令方法. 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in文件grep "thermcontact" */*.in 从文件内容查找与正则表达式匹配的行:$ grep –e “正则表达式” 文件名 查找时不区分大小写:$ grep –i "被查找的字符串" 文件名 查找匹配的行数:$ grep -c "被查找的字符串&quo

【转】Linux里如何查找文件内容

原文网址:http://blog.chinaunix.net/uid-25266990-id-199887.html Linux查找文件内容的常用命令方法. 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in文件grep "thermcontact" */*.in 从文件内容查找与正则表达式匹配的行:$ grep –e “正则表达式” 文件名 查找时不区分大小写:$ grep –i

Linux里如何查找文件内容 (转)

Linux查找文件内容的常用命令方法. 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in文件grep "thermcontact" */*.in 从文件内容查找与正则表达式匹配的行:$ grep –e “正则表达式” 文件名 查找时不区分大小写:$ grep –i "被查找的字符串" 文件名 查找匹配的行数:$ grep -c "被查找的字符串&quo

[转] Linux 查找文件内容

Linux查找文件内容的常用命令方法. 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in文件grep "thermcontact" */*.in 从文件内容查找与正则表达式匹配的行:$ grep –e "正则表达式" 文件名 查找时不区分大小写:$ grep –i "被查找的字符串" 文件名 查找匹配的行数:$ grep -c "被

python 修改文件内容

python 修改文件内容 一.修改原文件方式 1 def alter(file,old_str,new_str): 2 """ 3 替换文件中的字符串 4 :param file:文件名 5 :param old_str:就字符串 6 :param new_str:新字符串 7 :return: 8 """ 9 file_data = "" 10 with open(file, "r", encoding

Linux查找文件内容小技巧

目录 grep ag linux系统查找文件内容最常见的命令有grep和ag grep grep是比较常见的查找命令 # 在当前目录的py文件里查找所有相关内容 grep -a "broadcast" *.py # 在当前目录及子目录里(递归)查找,最后一个参数可以换成指定目录 grep -r "broadcast" . # 在指定目录及子目录里(递归)查找,不区分大小写 grep -r -i "broadcast" /src ag 相比grep

python改动文件内容,不须要read,write多个动作。

python  要改动文件内容,经常使用 是先read.后write , 再 rename.非常不爽. 比方:须要 把       yuv_dir ="../HD/"   # "H:/HD_Master/1080i25/" 改为       yuv_dir ="C:/HD/"   # "H:/HD_Master/1080i25/" 非常easy,但实际不好操作,由于read后文件指针就到后一行了.要使用seek到前一行等,非常

python修改文件内容,不需要read,write多个动作。

python  要修改文件内容,常用 是先read,后write , 再 rename,很不爽. 比如:需要 把       yuv_dir ="../HD/"   # "H:/HD_Master/1080i25/" 改为       yuv_dir ="C:/HD/"   # "H:/HD_Master/1080i25/" 很简单,但实际不好操作,因为read后文件指针就到后一行了,要使用seek到前一行等,很不好. 很多应