在python中从txt文件中提取字符之间的字符串
我有一个txt文件,希望python读取该文件,并希望python从中提取两个字符之间的字符串。以下是一个例子:在python中从txt文件中提取字符之间的字符串,python,character,extract,Python,Character,Extract,我有一个txt文件,希望python读取该文件,并希望python从中提取两个字符之间的字符串。以下是一个例子: Line a Line b Line c &TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST ! Line d
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
确实有效。谢谢!确实有效。谢谢!