shell - python实现把多级目录多个JS文件中包含某字符的字符串提取出来并加上标示存入一个文本文件中。
PHP中文网
PHP中文网 2017-04-18 09:03:20
0
2
521

一个草图:

现实现在文件夹和子文件夹下查找目标字符串,
但不知如何提取包含目标字符的字符串,并写入到新文件中。

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import os, sys
import fnmatch

listonly = False
skipexts = ['.js']
def visitfile(fname,searchkey):
    global fcount,vcount
    try:
        if not listonly:
            if os.path.splitext(fname)[1] in skipexts:
                if open(fname).read().find(searchkey) != -1:
                    print '%s has %s '%(fname,searchkey)
                    fcount+=1
    except: pass
    vcount +=1

def visitor(args,directoryName,filesInDirectory):
    for fname in filesInDirectory:
        # 返回文件所在路径和文件名
        fpath = os.path.join(directoryName,fname)
        if not os.path.isdir(fpath):

            visitfile(fpath,args)

def searcher(startdir,searchkey):
    global fcount,vcount
    fcount = vcount = 0
    os.path.walk(startdir,visitor,searchkey)

if __name__=='__main__':
    # root=raw_input("type root directory:")
    root = '/home/jiangbin/findJS'
    key=raw_input("type key:")
    searcher(root,key)
    print 'Found in %d files,visited %d'%(fcount,vcount)

run

type key:JSQ
/home/jiangbin/findJS/XXX.js has JSQ 
/home/jiangbin/findJS/JSQ.js has JSQ 
Found in 2 files,visited 19
PHP中文网
PHP中文网

认证0级讲师

모든 응답(2)
Peter_Zhu

거의 다 끝나지 않았나요....

https://gist.github.com/wusisu/e08ee53513c4410cf9ddd1ba5b0b80f5
제가 해냈습니다

---하지만 사실 쉘을 사용해도 괜찮습니다---------

으아악
  • 여기에서 find의 type f은 .js로 끝나는 파일 이름만 표시된다는 의미입니다.

  • xargs를 통해

  • 전달
  • grep을 사용하여 키워드 검색

  • 마지막으로 >을 사용하여

  • 내보내기
洪涛

Linux를 사용하는 경우 grep:

를 사용하는 것이 좋습니다. 으아악 으아악

(위 예에서는 첫 번째 줄 표시에 문제가 있습니다. 다음과 같아야 합니다. grep JSQ mydir/*.js)

파일로 가져올 수도 있습니다.

으아악

그런 다음 results.txt에서 통계를 정리하고 취합할 수 있습니다.

파이썬을 고집하신다면 제가 좀 더 최적화해야 할 코드를 작성했으니 참고하시면 됩니다.

으아악

search(root, key, ftype='', logname=None)

  • root

  • 경로 아래에 있습니다.
  • 파일 확장자가 있는 파일을 찾으세요ftype (제공하지 않으면 모든 파일이 허용됩니다)

  • 검색어 key

  • 가 포함되어 있는지 확인하세요.
  • logname을 지정하면 키워드 앞뒤에 '**' 강조 표시가 있는 로그 파일이 출력됩니다. 내용은 키워드가 포함된 각 행

  • 입니다.

는 실제로 다음과 같이 사용할 수 있습니다(search.py):

으아악

실행:

으아악

로그 파일 results:

으아악

내가 답변한 질문: Python-QA

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿