2

ここで困っています。ファイルを読み取る必要があります。一連のレコードを含む 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

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

コード:

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.

私は複数の検索を行いましたが、私を助けるものは何も見つかりませんでした. ありがとうございました!

4

8 に答える 8

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)

前の行と次の行が必要な場合はinFile、トライアドで反復する必要があります。最初に次を定義します。

def gen_triad(lines, prev=None):
    after = current = next(lines)
    for after in lines:
        yield prev, current, after
        prev, current = current, after

そして、前のようにします:

outFile.writelines(''.join(triad) for triad in gen_triad(inFile) 
                   if triad[1].startswith("03000") and "TO" in triad[1])
于 2013-05-15T21:00:40.877 に答える