使用 Ruby 或 Python 在文件中查找

news2024/11/25 12:33:37

对于经常使用爬虫的我来说,在大多数文本编辑器都会有“在文件中查找”功能,主要是方便快捷的查找自己说需要的内容,那我有咩有可能用Ruby 或 Python实现类似的查找功能?这些功能又能怎么实现?

在这里插入图片描述

问题背景

许多流行的文本编辑器都具有“在文件中查找”功能,该功能可以在一个对话框中打开,其中包含以下选项:

  • 查找: 指定要查找的文本。
  • 文件筛选器: 指定要搜索的文件类型。
  • 开始位置: 指定要开始搜索的目录。
  • 报告: 指定要显示的结果类型,例如文件名、文件计数或两者兼有。
  • 方法: 指定要使用的搜索方法,例如正则表达式或纯文本搜索。

有人希望使用 Python 或 Ruby 类来实现类似的功能,以便可以在任何支持 Python 或 Ruby 的平台上从脚本运行此操作。

解决方案

Python

以下代码提供了在指定目录中搜索特定文本的 Python 脚本示例:

import os
import re

def find_in_files(search_text, file_filter, start_dir, report_filenames, regex_search):
    results = []
    if regex_search:
        p = re.compile(search_text)
    for dir, subdirs, subfiles in os.walk(start_dir):
        for name in fnmatch.filter(subfiles, file_filter):
            fn = os.path.join(dir, name)
            with open(fn, 'r') as f:
                if regex_search:
                    results += [(fn, lineno) for lineno, line in enumerate(f) if p.search(line)]
                else:
                    results += [(fn, lineno) for lineno, line in enumerate(f) if line.find(search_text) >= 0]
    if report_filenames:
        return [fn for fn, _ in results]
    else:
        return results

search_text = '__searchtext__'
file_filter = '*.txt; *.htm'
start_dir = 'c:/docs/2009'
report_filenames = False
regex_search = False

results = find_in_files(search_text, file_filter, start_dir, report_filenames, regex_search)

for result in results:
    print(result)

Ruby

以下代码提供了在指定目录中搜索特定文本的 Ruby 脚本示例:

require 'find'
require 'rexml/document'

def find_in_files(search_text, file_filter, start_dir, report_filenames, regex_search)
  results = []
  if regex_search
    regex = Regexp.new(search_text)
  end
  Find.find(start_dir) do |path|
    if File.file?(path) && file_filter.match(path)
      file = File.open(path, 'r')
      file.each_line do |line|
        if regex_search
          results << path if line =~ regex
        else
          results << path if line.include?(search_text)
        end
      end
      file.close
    end
  end
  if report_filenames
    return results.uniq
  else
    return results
  end
end

search_text = '__searchtext__'
file_filter = '*.txt; *.htm'
start_dir = 'c:/docs/2009'
report_filenames = false
regex_search = false

results = find_in_files(search_text, file_filter, start_dir, report_filenames, regex_search)

results.each do |result|
  puts result
end

上述脚本可以接受以下参数:

  • searchtext:要查找的文本。
  • file_filter:要搜索的文件类型。
  • start_dir:要开始搜索的目录。
  • report_filenames:指定是只报告文件名还是同时报告文件内容。
  • regex_search:指定是否使用正则表达式进行搜索。

脚本将返回一个包含所有匹配文件的文件名列表,或者如果指定了报告文件名选项,则返回一个包含所有匹配文件的文件名和行号的列表。

上面就是两种语实现在文件中查找的具体代码,其实看着也不算太复杂,只要好好的去琢磨,遇到的问题也都轻而易举的解决,如果在使用中有任何问题,可以留言讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1512050.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vite 安装tailwindcss失效

需求&#xff1a;在vite5 vue3 ts中安装tailwindcss 问题&#xff1a;按照tailwindcss的官方文档进行安装&#xff0c;可是一直不生效 解决方式&#xff1a; 在mian.ts 里面导出 style.css 文件 就可以了哈

【HomeAssistant新版文件管理器】

【HomeAssistant新版文件管理器】 1. 前言2. 地址3. 安装4. 使用方法5. 总结欢迎大家阅读2345VOR的博客【Home Assistant 之QQ邮箱推送提醒】🥳🥳🥳2345VOR鹏鹏主页: 已获得CSDN《嵌入式领域优质创作者》称号🎉🎉、阿里云《arduino专家博主》👻👻👻,座右铭:…

基于Springboot的预报名管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的预报名管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&a…

从根到叶:深入了解Map和Set

窗间映出一片高远的天空&#xff0c; 向晚的天际宁静而又清明。 我孤独的心灵在幸福地哭泣&#xff0c; 它在为天空如此美好而高兴。 恬静的晚霞一片火红&#xff0c; 晚霞灼烧着我的热情。 此刻的世界没有别人&#xff0c; 只有上帝&#xff0c;我和天空。 ——&#x…

【vivado】 clock wizard 时钟IP

一、前言 MMCM和PLL是在FPGA设计中不可避免需要使用到的时钟资源&#xff0c;对于其功能及使用方法的理解是正确进行FPGA设计的前提。 二、Xilinx 时钟 IP配置 vivado中使用时钟向导(Clocking Wizard)配置时钟IP核&#xff0c;其框图如下&#xff1a; clk_in 输入时钟&#…

Grafana

介绍 官网&#xff1a;https://grafana.com/ Grafana 是一个开源的指标分析和可视化工具&#xff0c;它被广泛用于展示和监控云基础设施和应用程序的实时数据。Grafana 提供了一个强大且易于使用的界面&#xff0c;允许用户创建各种图表、图形和仪表盘&#xff0c;以直观地展…

【漏洞复现】大华智慧园区综合管理平台SQL注入漏洞

Nx01 产品简介 大华智慧园区综合管理平台是一款综合管理平台&#xff0c;具备园区运营、资源调配和智能服务等功能。该平台旨在协助优化园区资源分配&#xff0c;满足多元化的管理需求&#xff0c;同时通过提供智能服务&#xff0c;增强使用体验。 Nx02 漏洞描述 大华智慧园区…

Web3:数字身份与隐私保护的新篇章

1. 数字身份验证的革新 在传统互联网上&#xff0c;个人的数字身份通常由中心化的身份验证机构控制&#xff0c;存在安全性和隐私保护的风险。而在Web3中&#xff0c;基于区块链技术的去中心化身份验证方案正在兴起。通过使用分布式账本和加密技术&#xff0c;Web3可以提供更安…

122. 买卖股票的最佳时机 II(力扣LeetCode)

文章目录 122. 买卖股票的最佳时机 II题目描述贪心 122. 买卖股票的最佳时机 II 题目描述 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。…

力扣题目汇总分析 利用单调栈解决问题

496 下一个更大元素 I 问题 nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。给你两个 没有重复元素 的数组 nums1 和 nums2 &#xff0c;下标从 0 开始计数&#xff0c;其中nums1 是 nums2 的子集。为nums1中每个数字 x找到下一…

nvm 的安装与管理 node.js

文章目录 下载 nvm使用 nvm 下载与管理 node.jsnpm 切换镜像源使用 cnpm使用 yarn 下载 nvm NVM是Node.js的版本管理工具&#xff0c;它允许你轻松地在同一台机器上安装和切换不同版本的Node.js。使用NVM&#xff0c;你可以在不同的项目中使用不同的Node.js版本&#xff0c;而…

按键+串口发送实验

摸鱼记录 Day_15 &#xff5e;(&#xffe3;▽&#xffe3;&#xff5e;)(&#xff5e;&#xffe3;▽&#xffe3;)&#xff5e; review 前边已经学习了&#xff1a; 串口发送Vivado 串口通信(UART)------串口发送-CSDN博客 按键基于状态机的按键消抖实现-CSDN博客 1. …

WanAndroid(鸿蒙版)开发的第二篇

前言 DevEco Studio版本&#xff1a;4.0.0.600 WanAndroid的API链接&#xff1a;玩Android 开放API-玩Android - wanandroid.com 1、WanAndroid(鸿蒙版)开发的第一篇 其他一些参考点&#xff0c;请参考上面的WanAndroid开发第一篇 效果 首页实现 整体布局分为头部的Banne…

ARM学习(25)链接装载高阶认识

ARM学习&#xff08;25&#xff09;链接装载高阶认识 1、例子引出 笔者先引入几个编译链接的例子来介绍一下&#xff1a; 声明无效&#xff1a;declared implicitly&#xff1f;&#xff0c;属于编译错误还是链接错误&#xff1f; 编译阶段的错误&#xff0c;属于编译错误&am…

《量子计算:下一个大风口,还是一个热炒概念?》

引言 量子计算,作为一项颠覆性的技术,一直以来备受关注。它被认为是未来计算领域的一次革命,可能改变我们对计算能力和数据处理的理解。然而,随着技术的不断进步和商业应用的探索,人们开始思考,量子计算到底是一个即将到来的大风口,还是一个被过度炒作的概念? 量子计…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的夜间车辆检测系统(深度学习代码+UI界面+训练数据集)

摘要&#xff1a;开发夜间车辆检测系统对于自动驾驶技术具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个夜间车辆检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模型间…

Hadoop学习1:概述、单体搭建、伪分布式搭建

文章目录 概述基础知识Hadoop组件构成Hadoop配置文件 环境准备配置Hadoop配置下载配置环境变量 Hadoop运行模式Standalone Operation&#xff08;本地&#xff09;官方DemoWordCount单词统计Demo Pseudo-Distributed Operation&#xff08;伪分布式模式&#xff09;配置修改启动…

vscode使用remote-ssh免密连接服务器

你还在使用XShell、Hyper、FinalShell等等SSH客户端软件吗&#xff0c;作为前端的我们&#xff0c;一直在用的功能强大的开发工具vscode&#xff0c;早已实现SSH连接功能&#xff08;借助官方提供的插件&#xff09;。而且更加好用&#xff0c;可以直接打开服务器上的文件&…

使用npm版本管理工具解决npm 的EACCES permissions errors when installing packages globally错误

EACCES错误通常表示“权限被拒绝”&#xff0c;意味着您没有足够的权限来执行某个操作。在计算机领域&#xff0c;尤其是在文件系统和程序安装中&#xff0c;这个错误很常见。以下是可能导致EACCES错误的原因以及相应的解决方法&#xff1a; 文件系统权限&#xff1a;当您尝试…

❤️算法笔记❤️-(每日一刷-141、环形链表)

文章目录 题目思路解法 题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接…