一个草图:
现实现在文件夹和子文件夹下查找目标字符串,
但不知如何提取包含目标字符的字符串,并写入到新文件中。
#!/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
もうすぐ終わりではないでしょうか...
https://gist.github.com/wusisu/e08ee53513c4410cf9ddd1ba5b0b80f5
あなたのためにこれを行いました
----しかし実際には、シェルを使用しても大丈夫です--------
リーリーここでの find の
type f
は、.jsxargs 経由で
grep を使用してキーワードを検索します
最後に
>
を使用してLinux を使用している場合は、
を使用することをお勧めします。 リーリー リーリーgrep
:(上記の例では、最初の行の表示に問題があります。
grep JSQ mydir/*.js
のようになります)ファイルにインポートすることもできます:
リーリーその後、
results.txt
から統計を整理して編集できます。どうしても Python を使用したい場合は、より最適化する必要があるコードを書きましたので、それを参照してください:
リーリーsearch(root, key, ftype='', logname=None)
はパス
root
ファイル拡張子
ftype
を持つファイルを検索します (指定しない場合は、すべてのファイルが受け入れられます)中を検索してキーワード
key
logname
を指定すると、キーワードの前後に'**'
が強調表示されたログ ファイルが出力されます。内容は、キーワードを含む各行は実際には次のように使用できます (
リーリーsearch.py
):実行:
リーリーログファイル
リーリーresults
:私が回答した質問: Python-QA