从txt文件中选取部件并使用python复制到另一个文件

fre*_*lva 2 python file

我在这里遇到麻烦了.我需要读一个文件.包含一系列记录的Txt文件,检查我要将它们复制到新文件的记录.文件内容是这样的(这只是一个例子,原始文件有超过30 000行):

AAAAA|12|120 #begin file
00000|46|150 #begin register
03000|TO|460 
99999|35|436 #end register
00000|46|316 #begin register
03000|SP|467
99999|33|130 #end register
00000|46|778 #begin register
03000|TO|478
99999|33|457 #end register
ZZZZZ|15|111 #end file
Run Code Online (Sandbox Code Playgroud)

必须将以03000开头并且字符为"TO"的记录写入新文件.根据示例,该文件应如下所示:

AAAAA|12|120 #begin file
00000|46|150 #begin register
03000|TO|460 
99999|35|436 #end register
00000|46|778 #begin register
03000|TO|478
99999|33|457 #end register
ZZZZZ|15|111 #end file
Run Code Online (Sandbox Code Playgroud)

码:

file = open("file.txt",'r')
newFile = open("newFile.txt","w")    
content = file.read()
file.close()
# here I need to check if the record exists 03000 characters 'TO', if it exists, copy the recordset 00000-99999 for the new file.
Run Code Online (Sandbox Code Playgroud)

我做了多次搜索,没有找到任何帮助我.谢谢!

ely*_*ase 6

with open("file.txt",'r') as inFile, open("newFile.txt","w") as outFile:
    outFile.writelines(line for line in inFile 
                       if line.startswith("03000") and "TO" in line)
Run Code Online (Sandbox Code Playgroud)

如果您需要上一行和下一行,则必须迭代inFile三元组.首先定义:

def gen_triad(lines, prev=None):
    after = current = next(lines)
    for after in lines:
        yield prev, current, after
        prev, current = current, after
Run Code Online (Sandbox Code Playgroud)

然后像以前一样:

outFile.writelines(''.join(triad) for triad in gen_triad(inFile) 
                   if triad[1].startswith("03000") and "TO" in triad[1])
Run Code Online (Sandbox Code Playgroud)