我的目标是拿出一个脚本,将搜索一个特定的关键字的日志文件的文件夹,并输出到一个results.txt文件的文件名,行号在每个文件中包含的关键字,索引的关键字开始的地方和包含关键字的文本的完整行。
我已经创建了一些代码来实现这一点,但它在示例中存在问题,例如:
大家好,我们计划在本周末进行一些夜间维护,这意味着您将无法在周五晚上/周六早上(23/06/23至24/06/23)晚上7点至上午10点之间使用网络上的任何设备。我们对由此造成的不便表示歉意,但这是不可避免的。请确保您已在周五晚上(23/06/23)下午6点30分之前退出网络。
它正确地将关键字“device”标识为第1行,并从字符114开始,并且非常正确地显示了包含关键字“device”的整个文本块,而我希望它只显示出现关键字“device”的句子。
我在想:
- 对于每个“设备”,查找前一个句号之后和下一个句号之前的文本,或
- 获取“device”前后的n个字符
以下是我到目前为止编写的代码:
#Import os module
import os
fname2 = "D:\X250\Python_Scripts\Search_File_for_Keyword_and_Print_Line\Results.txt"
# String to search
search_path = input("Enter directory path to search : ")
file_type = input("File Type : ")
search_str = input("Enter the search string : ")
#**Create Output File**
fw = open(fname2, 'w')
# Append a directory separator if not already present
if not (search_path.endswith("/") or search_path.endswith("\\") ):
search_path = search_path + "/"
# If path does not exist, set search path to current directory
if not os.path.exists(search_path):
search_path ="."
# Repeat for each file in the directory
for fname in os.listdir(path=search_path):
# Apply file type filter
if fname.endswith(file_type):
# Open file for reading
fo = open(search_path + fname)
# Read the first line from the file
line = fo.readline()
# Initialize counter for line number
line_no = 1
# Loop until EOF
while line != '' :
# Search for string in line
index = line.find(search_str)
if ( index != -1) :
print(fname, "[", line_no, ",", index, "] ", line, sep="")
#Write Output File
fw.write(fname + " " + str(line_no) + " " + str(index)+" ")
fw.write(line)
# Read next line
line = fo.readline()
# Increment line counter
line_no += 1
# Close the files
fo.close()
字符串
1条答案
按热度按时间au9on6nz1#
类似这样的东西应该会起作用:
字符串