使用 python 和 VScode 快速查找代码
有些项目很大,如何快速查找文件内容呢?比如想在整个 chrome V8引擎的项目中搜索 V8_INTL_SUPPORT 这个关键字。
靠直接搜索是不行的,有些项目编译后有十几个GB,所以必须使用没有编译之前的源代码。
V8 的源代码,算上 depot_tools,共有 158MB,即使如此,搜索速度也不尽人意,因为有多达 15225 个文件。
所以我们还得把他们合并成一个文件,如 merge.txt 。
这下子查找效率变得比较高了。但我们如果想知道这个代码在哪个文件里该怎么办?
我们可以输出两个文件,merge_1.txt 和 merge_2.txt ,第一个文件专门用来放内容,第二个文件专门用来放某一行对应的源代码文件。
merge_1.txt 差不多长这样:
merge_2.txt 差不多长这样:
VSCode 小技巧:
-
使用 Ctrl+F 查找 -
使用 Ctrl+G 跳转到某一行
最后给出参考代码,使用 try...except... 来过滤那些非 UTF-8 字符的文件:
import os,sys
now=0
bad=0
tot_char=0
Out_1=open(r"C:\Aresword\VSCode\py\Search\merge-1.txt","w",encoding='utf-8')
Out_2=open(r"C:\Aresword\VSCode\py\Search\merge-2.txt","w",encoding='utf-8')
for filepath,dirnames,filenames in os.walk(r'C:\Aresword\V8\All_not_complied'):
for filename in filenames:
Path=os.path.join(filepath,filename)
now+=1
tmp=''
In=open(Path,"r",encoding='utf-8')
ok=1
while 1:
char=''
try:
char=In.read(1)
except Exception:
ok=0
break
if not char:
break
tmp+=char
tot_char+=1
if(tot_char%100000==0):
print('Now:',format(now,','),' Bad:',format(bad,','),' [ tot_char:',format(tot_char,','),']')
if(ok==1):
if(not tmp):
continue
if(tmp[-1]!='\n'):
tmp+='\n'
for char in tmp:
Out_1.write(char)
if(char=='\n'):
Out_2.write(Path+'\n')
else:
bad+=1
In.close()
Out_1.close()
Out_2.close()
|