一个草图:
现实现在文件夹和子文件夹下查找目标字符串,
但不知如何提取包含目标字符的字符串,并写入到新文件中。
#!/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
Bukankah anda hampir selesai....
https://gist.github.com/wusisu/e08ee53513c4410cf9ddd1ba5b0b80f5
Saya melakukannya untuk anda
----Tetapi sebenarnya, menggunakan shell ok--------
type f
cari di sini bermakna hanya nama fail akan dipaparkan, yang berakhir dengan .jsLulus
Gunakan grep untuk mencari kata kunci
Akhir sekali gunakan
>
untuk mengeksportJika anda menggunakan linux, maka saya cadangkan anda menggunakan
grep
:(Dalam contoh di atas, terdapat sesuatu yang salah dengan paparan baris pertama, ia sepatutnya seperti ini:
grep JSQ mydir/*.js
)Anda juga boleh mengimportnya ke dalam fail:
Kemudian anda boleh menyusun dan menyusun statistik daripada
results.txt
.Jika anda berkeras untuk menggunakan Python, saya menulis kod yang sepatutnya lebih dioptimumkan, anda boleh merujuknya:
search(root, key, ftype='', logname=None)
akan berada di bawah laluan
root
Cari fail dengan sambungan fail
ftype
(jika tidak diberikan, semua fail akan diterima)Cari di dalam untuk melihat sama ada ia mengandungi kata kunci
key
Jika
logname
diberikan, fail log dengan serlahan'**'
sebelum dan selepas kata kunci akan dikeluarkan Kandungannya ialah setiap barissebenarnya boleh digunakan seperti ini (
search.py
):Lari:
fail log
results
:Soalan yang saya jawab: Python-QA