设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
123
返回列表 发新帖
楼主: crossin先生
打印 上一主题 下一主题

【每日一坑 6】 查找文件内容

[复制链接]

1

主题

0

好友

50

积分

注册会员

Rank: 2

5#
发表于 2014-6-27 00:16:28 |只看该作者

回帖奖励 +5

  1. #!/usr/bin/env python
  2. #coding:UTF-8

  3. import os
  4. import re
  5. def VisitDir(path):
  6.   for root,dirs,files in os.walk(path):
  7.       for f in files:
  8.           if os.path.splitext(f)[1]=='.py':
  9.               content=open(os.path.join(root,f),'r').read()
  10.               if re.search('import os',content):
  11.                 print f
  12.          
  13. if __name__=="__main__":
  14.     path="."
  15.     VisitDir(path)
复制代码
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

地板
发表于 2014-1-2 10:30:56 |只看该作者
scz_000 发表于 2013-12-27 14:27
这题是不是可以拓展成为比较实用的搜索相关文本功能?不同的格式直接用open是不是默认用记事本打开,里面的 ...

open只是在python打开,把内容读入内存,不会调用任何其他程序打开。但这个过程是很慢的。所以虽然可以实现文本搜索,也还是不能用来全盘搜索。
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

134

积分

注册会员

Rank: 2

板凳
发表于 2013-12-27 14:27:04 |只看该作者

回帖奖励 +5

这题是不是可以拓展成为比较实用的搜索相关文本功能?不同的格式直接用open是不是默认用记事本打开,里面的那些编码有什么价值啊?小的文件夹还行,尝试的搜整个盘系统就会变得非常慢,用时似乎还要很久。
  1. # coding=gbk
  2. import os,fnmatch
  3. def find_txt(root,patterns='*'):#定义主函数,接受目录与所要匹配的拓展名为参数
  4.     list_of_file=[]#列表储存匹配文件路径
  5.     for dirname,subdir,filenames in os.walk(root):#使用os。walk(遍历包括子目录下所有文件),生成三组列表,第一组为当前目录地址,第二组为当下前目录下的文件夹名(没有则返回一个空列表),第三组为当前目录的所有文件
  6.         for i in filenames:#遍历当前目录下的所有文件,每个文件名加上当前文件夹路径,构成完整的文件路径
  7.             file_object='\\'.join([dirname,i])#构造完整目录
  8.             try:
  9.                 f=open(file_object,'r')#打开文件
  10.                 file_content= f.read()#读取文件
  11.                 if key_words in file_content:#判断关键词是否在文件内容内
  12.                     list_of_file.append(file_object)
  13.             finally:
  14.                 f.close()
  15.     return list_of_file
  16. if __name__=='__main__':
  17.     root=raw_input('所要搜索目录:')
  18.     key_words=raw_input('内容关键词:')
  19.     match_files=find_txt(root)
  20.     if match_files:
  21.         print "以下是包含关键词%s的文件"%key_words
  22.         for i in match_files:
  23.             print i
  24.     else:
  25.         print"没有找到相关文件"
复制代码
回复

使用道具 举报

0

主题

0

好友

389

积分

中级会员

Rank: 3Rank: 3

沙发
发表于 2013-12-26 22:32:29 |只看该作者

回帖奖励 +5

本帖最后由 fl0w 于 2013-12-26 22:35 编辑

findThemAll.py
  1. #! /usr/bin/env python
  2. # coding:utf-8

  3. import sys
  4. import os
  5. import fnmatch
  6. import re

  7. def filterFilename(path, text):
  8.     fileList = []
  9.     for dirpath, dirnames, filenames in os.walk(path):
  10.         for filename in filenames:
  11.             if fnmatch.fnmatch(filename, text):
  12.                 fileList.append(os.path.join(dirpath, filename))
  13.     return fileList

  14. if __name__ == "__main__":
  15.     if len(sys.argv) < 3:
  16.         print 'Please input like this:./findThemAll.py your_dir your_match_string'
  17.     elif os.path.exists(sys.argv[1]):
  18.         fileList = filterFilename(sys.argv[1],'*.txt')
  19.         themAll = []
  20.         for file in fileList:
  21.             with open(file) as f:
  22.                 content = f.read()
  23.                 if len(re.findall(sys.argv[2], content)) > 0:
  24.                     themAll.append(file)
  25.         print 'The files under %s contain "%s" are:' % (sys.argv[1], sys.argv[2])
  26.         print themAll
  27.     else:
  28.         print 'Are you sure the path is exist?'
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-17 15:20 , Processed in 0.025753 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部