我在这里遇到麻烦了.我需要读一个文件.包含一系列记录的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)
我做了多次搜索,没有找到任何帮助我.谢谢!
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)