Python中如何编写程序在当前目录及子目录下查找包含指定字符串的文件并打印相对路径

如题,原谅我比较渣,刚刚写完,马上放代码。


Python中如何编写程序在当前目录及子目录下查找包含指定字符串的文件并打印相对路径
2 回复
import os
import sys

def find_files_with_string(root_dir, search_string):
    """
    在当前目录及子目录中查找包含指定字符串的文件
    
    Args:
        root_dir: 搜索的根目录
        search_string: 要查找的字符串
    """
    found_files = []
    
    for dirpath, dirnames, filenames in os.walk(root_dir):
        for filename in filenames:
            filepath = os.path.join(dirpath, filename)
            
            try:
                # 尝试以文本模式读取文件
                with open(filepath, 'r', encoding='utf-8') as f:
                    content = f.read()
                    if search_string in content:
                        # 获取相对路径
                        rel_path = os.path.relpath(filepath, root_dir)
                        found_files.append(rel_path)
                        
            except (UnicodeDecodeError, PermissionError, OSError):
                # 跳过二进制文件或无权限访问的文件
                continue
    
    return found_files

def main():
    if len(sys.argv) != 2:
        print("用法: python find_string.py <要查找的字符串>")
        print("示例: python find_string.py 'hello world'")
        sys.exit(1)
    
    search_string = sys.argv[1]
    current_dir = os.getcwd()
    
    print(f"在目录 '{current_dir}' 中查找包含 '{search_string}' 的文件...")
    print("-" * 50)
    
    results = find_files_with_string(current_dir, search_string)
    
    if results:
        print(f"找到 {len(results)} 个文件:")
        for filepath in results:
            print(f"  ./{filepath}")
    else:
        print("未找到包含指定字符串的文件")

if __name__ == "__main__":
    main()

这个程序的核心是os.walk()函数,它会递归遍历目录树。对于每个文件,我们尝试用UTF-8编码读取内容,如果包含目标字符串就记录相对路径。程序处理了编码错误和权限问题,跳过二进制文件。

使用方法:

  1. 保存为find_string.py
  2. 运行:python find_string.py "要查找的文本"

如果要区分大小写搜索,把if search_string in content:改成if search_string.lower() in content.lower():

总结:用os.walk遍历,注意处理文件编码异常。


如下图:

回到顶部