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

0 投票
2 回答
1375 浏览
提问于 2025-04-18 13:01

我正在尝试写一个程序,从一个文本文件 text.txt 中打印选定的文本部分。

text.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

这里有三个“tick me”,但我想选择特定的“tickme 2.2(第4个)”,我需要在“tickme 3.3(第5个)”开始之前解析文本。

所以,如果段落中有“DIGITAL”,那么它应该打印“lesson1”。因为这会造成歧义,我想选择文本文件的一个范围。

输出:

lesson1-basics2

由于所有的“tick me”都有“lesson 1”这个共同点,我需要选择一个特定的区域,从“tickme 2.2(第4个)”到“tickme 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

请帮帮我!非常感谢你的回答。

2 个回答

0

你可以把范围作为函数的参数来指定。然后,你可以把这个范围内的所有行保存到一个列表里,接着可以用这个列表里的内容进行进一步的处理。

#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_range("tickme.txt","tickme 2.2(no.4)","tickme 3.3(no.5)") print lines

0

把文件分成几个小批次,像这样:

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())

这样做之后,事情就变得简单多了……

撰写回答