python解析文本文件的选定部分
我正在尝试使用一个程序从文本文件text.txt打印文本的选定部分 txt.txt包含: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
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
的参数提供)。