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

一个草图:

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

#!/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 を使用してキーワードを検索します

  • 最後に > を使用して

  • をエクスポートします
いいねを押す +0
洪涛

Linux を使用している場合は、grep:

を使用することをお勧めします。 リーリー リーリー

(上記の例では、最初の行の表示に問題があります。grep JSQ mydir/*.js のようになります)

ファイルにインポートすることもできます:

リーリー

その後、results.txt から統計を整理して編集できます。

どうしても Python を使用したい場合は、より最適化する必要があるコードを書きましたので、それを参照してください:

リーリー

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

  • はパス root

  • の下になります。
  • ファイル拡張子 ftype を持つファイルを検索します (指定しない場合は、すべてのファイルが受け入れられます)

  • 中を検索してキーワード key

  • が含まれているかどうかを確認します
  • logname を指定すると、キーワードの前後に '**' が強調表示されたログ ファイルが出力されます。内容は、キーワードを含む各行

  • です。

は実際には次のように使用できます (search.py):

リーリー

実行:

リーリー

ログファイル results:

リーリー

私が回答した質問: Python-QA

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート