根据开始和终点触发器复制行数



我有一个脚本,该脚本仅收集来自多个日志文件的重要文本行,并将其写入单独的文本文件。只要我提供一个搜索字符串片段,它就起作用。找到一旦找到,它将复制整个文本线,其中找到字符串片段。现在,我需要它根据已知的启动和结束文本摘要选择多条文本。我正在阅读的日志文件之间/包括启动和结束文本段之间的行总数各不相同。我已经搜索并尝试了很多东西,但是无法使其工作。我正在提供我到目前为止所拥有的。

我不是Python Newbie,但远非专家。任何/所有建议都非常感谢。

import os, time, datetime, fnmatch, re
from time import strftime, time
# Open log file to record actions
dirName = "D://GISlogs//" + strftime("%Y%m%d")
global pubfilePrefix
pubfilePrefix = datetime.datetime.now() + datetime.timedelta(minutes=1)
pubfileName = "D://GISlogs//" + strftime("%Y%m%d") + "//" + pubfilePrefix.strftime("%Y%m%d_%H%M%S") + "_SUMMARIZE_MorningActivities.txt"
if os.path.exists(pubfileName) and os.path.isfile(pubfileName) and os.access(pubfileName, os.W_OK):
    with open(pubfileName, "a") as myFile:
        myFile.write(strftime("%Y-%m-%d %H:%M:%S") + "  SUMMARIZING ALL GIS ACTIVITIES1" + "rn" + "rn")
else:
    try:
        os.makedirs(dirName)
        with open(pubfileName, "a") as myFile:
            myFile.write(strftime("%Y-%m-%d %H:%M:%S") + "  SUMMARIZING ALL GIS ACTIVITIES2" + "rn" + "rn")
    except OSError:
        if os.path.isdir(dirName):
            with open(pubfileName, "a") as myFile:
                myFile.write(strftime("%Y-%m-%d %H:%M:%S") + "  SUMMARIZING ALL GIS ACTIVITIES3" + "rn" + "rn")
def Search_LogFile(searchPhrase, titleBlock):
    if searchPhrase == "~-~-~":
        with open(pubfileName, "a") as myFile:
            myFile.write("rn" + titleBlock + "rn" + "---------------------------------------------------------------------------------------" + "rn")
    with open("D://GISlogs//" + strftime("%Y%m%d") + "//" + searchFile, "r") as readFile:
        for readLine in readFile:
            if searchPhrase in readLine:
                if re.compile("^[0-9]{4}-[0-9]{2}-[0-9]{2} ").match(readLine):
                    readLine = readLine[11:]
                with open(pubfileName, "a") as myFile:
                    myFile.write(readLine)
for searchFile in os.listdir(dirName):
    if fnmatch.fnmatch(searchFile, "*COPY_TaxRollData.txt"):
        Search_LogFile("~-~-~", "Acquiring Updated Data from PVA")
        Search_LogFile(" - DELETING PREVIOUSLY DOWNLOADED PVA DATA", "")
        Search_LogFile(" - DOWNLOADING THE LATEST SNAPSHOT OF PUBLIC INQUIRY DATABASE", "")
        Search_LogFile(" - ARCHIVING ALL DOWNLOADED FILES", "")
        Search_LogFile(" - RECONCILING NEW DOWNLOAD WITH PRIOR DATA", "")
        Search_LogFile(" - EXECUTING FME MODEL TO OVERWRITE PVA DATA IN SDE", "")
    if fnmatch.fnmatch(searchFile, "*INTEGRATE_TaxRollData.txt"):
        Search_LogFile("~-~-~", "Integrating Updated Data from PVA into the SDE Production EGDB")
        Search_LogFile("|INFORM|Reading table/feature class '", "")
        Search_LogFile("|INFORM|Opened Shape File '", "")
        Search_LogFile("|INFORM|CSV reader: Opening dataset '", "")
        Search_LogFile("|ERROR |", "")
        Search_LogFile("|INFORM|Translation was SUCCESSFUL", "")
        Search_LogFile("|INFORM|FME Session Duration:", "")
        #THE NEXT 9 LINES IS MY LATEST ATTEMPT. IT WORKS OUTSIDE OF THIS BLOCK OF CODE, BUT NOT HERE
        valid=False
        for line in searchFile:
            if re.compile(".*Features Written Summary.*").match(line):
                valid=True
            if re.compile(".*Total Features Written.*").match(line):
                valid=False
            if valid:
                with open(pubfileName, "a") as myFile:
                    myFile.write(line)
        #Search_LogFile("Features Written Summary", "")
        Search_LogFile("  PVA TAX ROLL DATA HAS BEEN RE-INTEGRATED IN THE SDE PRODUCTION DATABASE", "") 
print('rn' +'The Script Completed successfully')   

进一步澄清 - 我希望以我的捕获开始的线条上的文本"特征书面摘要",而我希望以我的捕获结束的"写总功能"。两个片段都出现的整个线以及介于两者之间的所有线路)。启动和结尾片段都仅在日志文件中出现一次。

@madphysicist运行代码时,它会找到第一个日志文件并寻找特定的短语。当它找到它们时,它将写入整个文本行,其中将短语找到到另一个文本文件。然后,它寻找下一个特定的短语并做同样的事情。在该日志文件中查找所有特定短语后,它将找到下一个日志文件,并寻找特定于该特定日志文件的不同短语集。它效果很好。

但是我要添加的是有些不同的调整,我无法弄清楚。在第二个日志文件中,我想将其中的多个连续线复制到我的其他文本文件中。我可以使用上述方法复制起始行和终点线,但是皱纹是我还想在起始行和终点线之间复制所有文本行。开始线和终点之间的线数也可能会有所不同,因此不能硬编码。

所以我现在有一个工作解决方案,但是我不确定它是否是最有效的和/或可以更好地设计的。我将把它放置在适当的位置,但是如果有人能想到一种更好的方法来解决我想在这里做的事情,那么我全都是……

import os, time, datetime, fnmatch, re
from time import strftime, time
# Open log file to record actions
dirName = "D://GISlogs//" + strftime("%Y%m%d")
global pubfilePrefix
pubfilePrefix = datetime.datetime.now() + datetime.timedelta(minutes=1)
pubfileName = "D://GISlogs//" + strftime("%Y%m%d") + "//" + 
pubfilePrefix.strftime("%Y%m%d_%H%M%S") + "_SUMMARIZE_MorningActivities.txt"
if os.path.exists(pubfileName) and os.path.isfile(pubfileName) and os.access(pubfileName, os.W_OK):
    with open(pubfileName, "a") as myFile:
        myFile.write(strftime("%Y-%m-%d %H:%M:%S") + "  SUMMARIZING ALL GIS ACTIVITIES1" + "rn" + "rn")
else:
    try:
        os.makedirs(dirName)
        with open(pubfileName, "a") as myFile:
            myFile.write(strftime("%Y-%m-%d %H:%M:%S") + "  SUMMARIZING ALL GIS ACTIVITIES2" + "rn" + "rn")
    except OSError:
        if os.path.isdir(dirName):
            with open(pubfileName, "a") as myFile:
                myFile.write(strftime("%Y-%m-%d %H:%M:%S") + "  SUMMARIZING ALL GIS ACTIVITIES3" + "rn" + "rn")
def Search_LogFile(searchPhrase, titleBlock):
    if searchPhrase == "~-~-~":
        with open(pubfileName, "a") as myFile:
            myFile.write("rn" + titleBlock + "rn" + "---------------------------------------------------------------------------------------" + "rn")
    with open("D://GISlogs//" + strftime("%Y%m%d") + "//" + searchFile, "r") as readFile:
        for readLine in readFile:
            if searchPhrase in readLine:
                if re.compile("^[0-9]{4}-[0-9]{2}-[0-9]{2} ").match(readLine):
                    readLine = readLine[11:]
                with open(pubfileName, "a") as myFile:
                    myFile.write(readLine)
            if searchPhrase in readLine and searchPhrase == "Features Written Summary":
                valid=False
                for line in readFile:
                    if re.compile(".*|                           Features Written Summary.*").match(line):
                        valid = True
                    if re.compile(".*END - ProcessID.*").match(line):
                        valid = False
                    if valid:
                        if re.compile("^[0-9]{4}-[0-9]{2}-[0-9]{2} ").match(line):
                            line = line[11:]
                            with open(pubfileName, "a") as myFile:
                                myFile.write(line)
for searchFile in os.listdir(dirName):
    if fnmatch.fnmatch(searchFile, "*COPY_TaxRollData.txt"):
        Search_LogFile("~-~-~", "Acquiring Updated Data from PVA")
        Search_LogFile(" - DELETING PREVIOUSLY DOWNLOADED PVA DATA", "")
        Search_LogFile(" - DOWNLOADING THE LATEST SNAPSHOT OF PUBLIC INQUIRY DATABASE", "")
        Search_LogFile(" - ARCHIVING ALL DOWNLOADED FILES", "")
        Search_LogFile(" - RECONCILING NEW DOWNLOAD WITH PRIOR DATA", "")
        Search_LogFile(" - DISCONNECTING W: DRIVE", "")
        Search_LogFile(" - EXECUTING FME MODEL TO OVERWRITE PVA DATA IN SDE", "")
    if fnmatch.fnmatch(searchFile, "*INTEGRATE_TaxRollData.txt"):
        Search_LogFile("~-~-~", "Integrating Updated Data from PVA into the SDE Production EGDB")
        Search_LogFile("Reading table/feature class '", "")
        Search_LogFile("Opened Shape File '", "")
        Search_LogFile("CSV reader: Opening dataset '", "")
        Search_LogFile("|ERROR |", "")
        #Search_LogFile("|WARN  |", "")
        Search_LogFile("Features Written Summary", "")

最新更新