Python:在文本文件中搜索单词并使用行号打印行

时间:2018-02-07 10:01:45

标签: python parsing input grep

我的目标是创建一个搜索输入文件中凭据的脚本。

我找到了无数的例子,即使在StackOverflow ,也可以教我如何在文件中搜索一系列单词:

顺便说一句,当我尝试将这些规则应用到我的脚本时,它什么都没有回复。

这是我的代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import argparse
import sys

parser = argparse.ArgumentParser()                              
parser.add_argument('-input', dest='input',help="input one or more files",metavar=None)                     
args = parser.parse_args()


GrabdirectoryFile = open(args.input,"r",encoding='UTF8')                    
directoryFile = GrabdirectoryFile.read()

HotWords = ['password', 'admin']

def search_for_lines(filename, words_list):
    words_found = 0
    for line_no, line in enumerate(filename):
        if any(word in line for word in words_list):
            print(line_no, ':', line)
            words_found += 1
    return words_found

search_for_lines(directoryFile,HotWords)

我尝试按照我在上面提供的2个链接上找到的说明但没有运气。

enter image description here

代码肯定已执行,Python不会返回任何错误。 该文件包含许多单词以及一些“密码”和“管理员”,但不返回任何行。

为什么?

编辑:

亲爱的@Kirk Broadhurst,@ SIM,@AndréShild,@ kasperhj,@ Garrett Hyde,我试图关注你的link并用我的代码代替:

with open(args.input) as openfile:
    for line in openfile:
        for part in line.split():
            if "color=" in part:
                print (part)

但不幸的是仍然无法正常工作。 @ Farhan.K在下面提供了正确的解决方案,我不得不使用readlines()而不是read()

1 个答案:

答案 0 :(得分:2)

您正在使用file.read()读取文件,该文件会返回一个字符串,但您需要一个列表。请改用file.readlines()。另外,最好使用with语句来打开/关闭文件。

替换

GrabdirectoryFile = open(args.input,"r",encoding='UTF8')                    
directoryFile = GrabdirectoryFile.read()

...与

GrabdirectoryFile = open(args.input,"r",encoding='UTF8')                    
directoryFile = GrabdirectoryFile.readlines()

使用with语句更好:

with open(args.input,"r",encoding='UTF8') as GrabdirectoryFile:
    directoryFile = GrabdirectoryFile.readlines()