我在目录中有近200个文件,我正在寻找特定的文件
这200个文件中包含username
,pin
和schema
等字词。
问题是如何改进以下脚本以查找目录中所有文件中的单词。我当前的脚本只能搜索一个文件中的单词并添加行号。
以下是我的剧本:
from os import system, listdir,path
import time
system("cls")
system("color b9")
with open("C:\Users\ilan\Desktop\kobi.txt") as filee:
for line in filee:
for word in line.split():
if word.lower() =="user" or word.lower()=="password" or word.lower()=="username" or word.lower()=="pass" or word.lower()=="secret" or word.lower()=="key" or word.lower()=="backdoor" or word.lower()=="ip":
FILE=open("CodeR.txt","a")
FILE.write(word + "\n" )
#count =1
#FILE.write(str(count)+word + "\n" )
#count+=1
FILE.close()
答案 0 :(得分:1)
在您处理几个语法错误之前,您的脚本将无法正常工作。 以下是使其发挥作用所需要的:
Python专门处理反斜杠字符(" \")(如" \ n")。 如果您想/需要在字符串中使用反斜杠字符,您可以:
一个。 "逃"每个反斜杠字符加倍,如:
with open("C:\\Users\\ilan\Desktop\\kobi.txt") as filee:
这告诉Python你真的想要一个反斜杠字符。
OR
B中。把你的字符串变成"原始字符串"在它之前加上' r',如:
with open(r"C:\Users\ilan\Desktop\kobi.txt") as filee:
缩进整个" for file in filee"块。
这会将您的代码转换为:
from os import system, listdir,path
import time
system("cls")
system("color b9")
with open("C:\\Users\\ilan\Desktop\\kobi.txt") as filee:
for line in filee:
for word in line.split():
if word.lower() =="user" or word.lower()=="password" or word.lower()=="username" or word.lower()=="pass" or word.lower()=="secret" or word.lower()=="key" or word.lower()=="backdoor" or word.lower()=="ip":
FILE=open("CodeR.txt","a")
FILE.write(word + "\n" )
#count =1
#FILE.write(str(count)+word + "\n" )
#count+=1
FILE.close()
可以通过以下方式简化:
删除:
import time
因为不需要它。
此外,正如furas建议的那样,您可以通过使用以下方式消除使用lower()这么多次的需要:
word = word.lower()
然而,我建议改为将您读入的整行转换为小写。
这会将您的代码转换为:
from os import system, listdir,path
system("cls")
system("color b9")
with open("C:\\Users\\ilan\Desktop\\kobi.txt") as filee:
for line in filee:
for word in line.lower().split():
if word =="user" or word=="password" or word=="username" or word=="pass" or word=="secret" or word=="key" or word=="backdoor" or word=="ip":
FILE=open("CodeR.txt","a")
FILE.write(word + "\n" )
#count =1
#FILE.write(str(count)+word + "\n" )
#count+=1
FILE.close()
然后,然后更改该代码,使其适用于“桌面”中的所有文件。如你所知,你可以使用' os.listdir' 与其他一些清理一起执行此操作(在任何缩进块之外移动您的FILE.open()和FILE.close()并将所有单词放入'设置'您可以检查其成员身份in)给出:
from os import system, listdir,path
system("cls")
system("color b9")
FILE=open("CodeR.txt","a")
for fn in listdir("C:\\Users\\ilan\Desktop"):
with open("C:\\Users\\ilan\Desktop\\" + fn) as filee:
for line in filee:
for word in line.lower().split():
if word in {"user", "password", "username", "pass", "secret", "key", "backdoor", "ip"}:
FILE.write(word + "\n" )
#count =1
#FILE.write(str(count)+word + "\n" )
#count+=1
FILE.close()
(否则,您可以重复打开和关闭FILE。)
最后,如果你的桌面'目录包含任何文件夹,您可以使用os.path.isfile()函数将它们排除在正常文件中(并使脚本崩溃)。 并且您可以使用os.path.join()将路径的各个部分与文件名组合在一起(让os添加任何所需的向前或向后斜杠)。 这个,以及间距等的一些变化,更多"标准" (根据PEP8样式指南所期望的),给出:
from os import system, listdir, path
system("cls")
system("color b9")
FILE = open("CodeR.txt", "a")
desktop_dir = r"C:\Users\ilan\Desktop"
for fn in listdir(desktop_dir):
fn_w_path = path.join(desktop_dir, fn)
if path.isfile(fn_w_path):
with open(fn_w_path) as filee:
for line in filee:
for word in line.lower().split():
if word in {"user", "password", "username", "pass",
"secret", "key", "backdoor", "ip"}:
FILE.write(word + "\n")
FILE.close()
答案 1 :(得分:0)
使用os.walk
遍历目录树中的所有文件。
使用正则表达式(re
模块)来搜索文本中的单词。
import os
import re
words = ['password', 'user', 'ip', 'key']
rx = re.compile('|'.join(words))
for root, dirs, files in os.walk('C:\\Users\\ilan\Desktop'):
for filename in files:
with open(filename) as df:
data = df.read()
for match in rx.finditer(data):
# Use the MatchObject as you like
print match.span()