3

次の内容のプレーン テキスト ファイルがあります。

@M00964: XXXXX
YYY
+
ZZZZ 
@M00964: XXXXX
YYY
+
ZZZZ
@M00964: XXXXX
YYY
+
ZZZZ

そして、これをIDコードに従ってアイテムに分割されたリストに読みたいと思います@M00964

['@M00964: XXXXX
YYY
+
ZZZZ' 
'@M00964: XXXXX
YYY
+
ZZZZ'
'@M00964: XXXXX
YYY
+
ZZZZ']

使ってみました

in_file = open(fileName,"r")
sequences = in_file.read().split('@M00964')[1:]
in_file.close()

ただし、これにより ID シーケンスが削除されます@M00964。この ID シーケンスを保持する方法はありますか?

追加の質問として、リスト内の空白を維持する方法はありますか (/n 記号を使用するのではなく)。

私の全体的な目的は、この一連の項目を読み取り、たとえば最初の 2 つを取得して、元の書式設定をすべて維持したままテキスト ファイルに書き戻すことです。

4

3 に答える 3

3

ファイルが大きく、すべてをメモリに保持したくない場合は、このヘルパー関数を使用して個々のレコードを反復処理できます。

def chunk_records(filepath)
    with open(filepath, 'r') as f:
        record = []
        for line in f:
            # could use regex for more complicated matching
            if line.startswith('@M00964') and record:
                yield ''.join(record)
                record = []
            else:
                record.append(line)
        if record:
            yield ''.join(record)

のように使う

for record in chunk_records('/your/filename.txt'):
    ...

または、すべてをメモリに入れたい場合:

records = list(chunk_records('/your/filename.txt'))
于 2014-03-25T15:33:41.747 に答える