网站开发的数据,wordpress二次元博客,电子商务网站设计,htmi 个人小网站 模板对于经常使用爬虫的我来说#xff0c;在大多数文本编辑器都会有“在文件中查找”功能#xff0c;主要是方便快捷的查找自己说需要的内容#xff0c;那我有咩有可能用Ruby 或 Python实现类似的查找功能#xff1f;这些功能又能怎么实现#xff1f; 问题背景
许多流行的文本…对于经常使用爬虫的我来说在大多数文本编辑器都会有“在文件中查找”功能主要是方便快捷的查找自己说需要的内容那我有咩有可能用Ruby 或 Python实现类似的查找功能这些功能又能怎么实现 问题背景
许多流行的文本编辑器都具有“在文件中查找”功能该功能可以在一个对话框中打开其中包含以下选项
查找 指定要查找的文本。文件筛选器 指定要搜索的文件类型。开始位置 指定要开始搜索的目录。报告 指定要显示的结果类型例如文件名、文件计数或两者兼有。方法 指定要使用的搜索方法例如正则表达式或纯文本搜索。
有人希望使用 Python 或 Ruby 类来实现类似的功能以便可以在任何支持 Python 或 Ruby 的平台上从脚本运行此操作。
解决方案
Python
以下代码提供了在指定目录中搜索特定文本的 Python 脚本示例
import os
import redef 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 resultssearch_text __searchtext__
file_filter *.txt; *.htm
start_dir c:/docs/2009
report_filenames False
regex_search Falseresults 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/documentdef find_in_files(search_text, file_filter, start_dir, report_filenames, regex_search)results []if regex_searchregex Regexp.new(search_text)endFind.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_searchresults path if line ~ regexelseresults path if line.include?(search_text)endendfile.closeendendif report_filenamesreturn results.uniqelsereturn resultsend
endsearch_text __searchtext__
file_filter *.txt; *.htm
start_dir c:/docs/2009
report_filenames false
regex_search falseresults 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指定是否使用正则表达式进行搜索。
脚本将返回一个包含所有匹配文件的文件名列表或者如果指定了报告文件名选项则返回一个包含所有匹配文件的文件名和行号的列表。
上面就是两种语实现在文件中查找的具体代码其实看着也不算太复杂只要好好的去琢磨遇到的问题也都轻而易举的解决如果在使用中有任何问题可以留言讨论。