在python中从txt文件中提取字符之间的字符串

在python中从txt文件中提取字符之间的字符串,python,character,extract,Python,Character,Extract,我有一个txt文件,希望python读取该文件,并希望python从中提取两个字符之间的字符串。以下是一个例子: Line a Line b Line c &TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST ! Line d

我有一个txt文件,希望python读取该文件,并希望python从中提取两个字符之间的字符串。以下是一个例子:

Line a

Line b

Line c

&TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST !

Line d

Line e
我想要的是python读取行,当它遇到“&”时,我希望它开始打印行(包括带“$”的行),直到它遇到“!”

有什么建议吗?

下面是一个(非常简单!)的例子

def Printer():
    f = open("yourfile.txt")
    Pr = False
    for line in f.readlines():
        if Pr: print line
        if "&" in line:
            Pr = True
            print line
        if "!" in line:
            Pr = False
    f.close()
下面是一个(非常简单!)的例子

def Printer():
    f = open("yourfile.txt")
    Pr = False
    for line in f.readlines():
        if Pr: print line
        if "&" in line:
            Pr = True
            print line
        if "!" in line:
            Pr = False
    f.close()
这项工作:

data=[]
flag=False
with open('/tmp/test.txt','r') as f:
    for line in f:
        if line.startswith('&'):
            flag=True
        if flag:
            data.append(line)
        if line.strip().endswith('!'):
            flag=False

print ''.join(data)  
如果您的文件足够小,可以将其全部读入内存,并且
&
中没有歧义
作为所需字符串的开头和结尾,这更容易:

with open('/tmp/test.txt','r') as f:
    data=''.join(f.readlines())    

print data[data.index('&'):data.index('!')+1] 
或者,如果您想在中读取整个文件,但只使用
&
如果它们分别位于行首和行尾,则可以使用正则表达式:

import re

with open('/tmp/test.txt','r') as f:
    data=''.join(f.readlines())    

m=re.search(r'^(&.*!)\s*?\n',data,re.S | re.M)    
if m: print m.group(1)   
这项工作:

data=[]
flag=False
with open('/tmp/test.txt','r') as f:
    for line in f:
        if line.startswith('&'):
            flag=True
        if flag:
            data.append(line)
        if line.strip().endswith('!'):
            flag=False

print ''.join(data)  
如果您的文件足够小,可以将其全部读入内存,并且
&
中没有歧义
作为所需字符串的开头和结尾,这更容易:

with open('/tmp/test.txt','r') as f:
    data=''.join(f.readlines())    

print data[data.index('&'):data.index('!')+1] 
或者,如果您想在中读取整个文件,但只使用
&
如果它们分别位于行首和行尾,则可以使用正则表达式:

import re

with open('/tmp/test.txt','r') as f:
    data=''.join(f.readlines())    

m=re.search(r'^(&.*!)\s*?\n',data,re.S | re.M)    
if m: print m.group(1)   

一个简单的解决方案如下所示。代码包含大量注释,使您能够理解每一行代码。代码的美妙之处在于,它使用with运算符处理异常并关闭资源(如文件)

#指定输入文件的绝对路径。
file_path=“input.txt”
#以读取模式打开文件。with运算符用于处理try..except..finally块。
打开(文件路径,“r”)作为f:
''读取文件的内容。这里要小心,因为这会将整个文件读入内存。
如果文件太大,则首选在文件对象上迭代
''' 
content=f.read()
大小=长度(内容)
开始=0
当开始<大小:
#读取最后一个后的起始索引(&F)!指数
开始=内容。查找(&),开始)
#如果找到了,请继续,否则转到内容末尾(这只是为了避免编写If语句。
开始=如果开始,则开始!=-1其他大小
#在最后一个$index之后读取!的起始索引。
结束=内容。查找(“!”,开始)
#同样,如果找到,请继续执行else,转到内容末尾(这只是为了避免编写if语句。
结束=结束如果结束!=-1其他大小
''打印$和!(不包括这两个运算符)之间的内容。
如果未找到!字符,则打印到文件末尾。
''' 
打印内容[开始+1:结束]
#在!字符的位置后向前移动光标。
开始=结束+1

下面显示了一个简单的解决方案。代码包含大量注释,让您能够理解每一行代码。代码的美妙之处在于,它使用with operator处理异常并关闭资源(如文件)

#指定输入文件的绝对路径。
file_path=“input.txt”
#以读取模式打开文件。with运算符用于处理try..EXPECT..finally块。
打开(文件路径,“r”)作为f:
''读取文件的内容。在这里要小心,因为这会将整个文件读入内存。
如果文件太大,则首选在文件对象上迭代
''' 
content=f.read()
大小=长度(内容)
开始=0
当开始<大小:
#读取上一个!索引之后的起始索引(&F)。
开始=内容。查找(&),开始)
#如果找到了,请继续,否则转到内容末尾(这只是为了避免编写If语句。
开始=如果开始,则开始!=-1其他大小
#在最后一个$index之后读取!的起始索引。
结束=内容。查找(“!”,开始)
#同样,如果找到,请继续执行else,转到内容末尾(这只是为了避免编写if语句。
结束=结束如果结束!=-1其他大小
''打印$和!(不包括这两个运算符)之间的内容。
如果未找到!字符,则打印到文件末尾。
''' 
打印内容[开始+1:结束]
#在!字符的位置后向前移动光标。
开始=结束+1

确实有效。谢谢!确实有效。谢谢!