Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python解析文本文件的选定部分_Python - Fatal编程技术网

python解析文本文件的选定部分

python解析文本文件的选定部分,python,Python,我正在尝试使用一个程序从文本文件text.txt打印文本的选定部分 txt.txt包含: tickme 1.1(no.3) lesson1-bases lesson2-advancedfurther para:using the dsp signals are sened via a transmitter to conver to analong signals and gets the output in the form of digital signal tickme 2.2(no.4

我正在尝试使用一个程序从文本文件text.txt打印文本的选定部分

txt.txt包含:

tickme 1.1(no.3)
lesson1-bases
lesson2-advancedfurther
para:using the dsp signals are sened via a transmitter to conver to analong signals and gets the output in the form of digital signal

tickme 2.2(no.4)
lesson1-basics2
lesson2-advanced4
para:using the DIGITAL signals are sened via a transmitter to conver to analong signals and gets the output in the form of digital signal

tickme 3.3(no.5)
lesson1-bas
lesson2-adv
para:using the dsp signals are sened via a transmitter to conver to analong signals and gets the output in the form of digital signal
这里它由3个tickme组成,但我想选择一个特定的tickme2.2(no.4),在这里我必须在tickme3.3(no.5)开始之前解析文本

所以,若DIGITAL在para中,那个么它必须打印leason1,因为它会导致歧义,我想选择文本文件的范围

输出:

lesson1-basics2
因为它有第1课“所有勾选我”的共同点,我需要选择特定区域,在勾选2.2(第4个)到勾选3.3(第5个)之间进行解析。有没有办法获取特定区域的范围并进行解析

程序:它不选择特定的范围

searchstring=""
with open('text.txt','r') as file:

    for line in file:
        if 'tickme' in line:
            searchstring=line
        if searchstring!='':
            if 'DIGITAL' in line:
                print searchstring
                print line

请帮忙!如果您能将范围指定为函数参数,我们将不胜感激。然后,您可以将该范围内的所有行保存在列表中,并使用该行列表进行进一步解析

#Function to accept file name, start line of range, end line of range
#Returns a list of lines within that range 
def select_range(filename, start_range, end_range):
f = open(filename, 'r')
selected_lines=[]
start=0
for line in f:
    if start_range in line:
        start=1
    if end_range in line:
        start=0
        return selected_lines
    if start==1:
        selected_lines.append(line)
return selected_lines
lines=select_范围(“tickme.txt”、“tickme2.2(no.4)”、“tickme3.3(no.5)”)

打印行

将文件分为以下几批:

with open('txt.txt') as f:
    batches = []

    t = []
    for l in line:
        if 'tickme' in l:
            # Start a new bactch after saving the previous batch 
            if t: batches.apend(t)
            t = [l.strip()]
        else:
            if len(l.strip()) > 1: t.append(l.strip())

然后事情就变得容易多了……

应该用什么来指定范围?例如,从第一次发现
tickme2.2
到下一次出现
tickme
?在任何情况下,如果预期的输出总是在带
数字
的行之前两行,而不是逐行搜索
数字
,但总是在内存中保留前两行,则此信息必须在程序中的某个位置(或作为
sys.argv
的参数提供)。