0

皆さん、私は以下の形式の大きなファイルを持っています。データは「ブロック」形式です。時間T、ユーザーU、コンテンツWの3つの行を含む1つの「ブロック」。たとえば、これはブロックです。

T   2009-06-11 21:57:23
U   tracygazzard
W   David Letterman is good man

特定のキーワードを含むブロックのみを使用するためです。データ全体をメモリにダンプするのではなく、元の大量のデータからブロックごとにデータをスライスします。毎回1つのブロックを読み取り、「バイク」という単語を含むコンテンツの行の場合は、このブロックをディスクに書き込みます。

次の2つのブロックを使用して、スクリプトをテストできます。

T   2009-06-11 21:57:23
U   tracygazzard
W   David Letterman is good man

T   2009-06-11 21:57:23
U   charilie
W   i want a bike

私は行ごとに作業をしようとしました:

data = open("OWS.txt", 'r')
output = open("result.txt", 'w')

for line in data:
    if line.find("bike")!= -1:
    output.write(line)
4

2 に答える 2

1

正規表現を使用できます。

import re
data = open("OWS.txt", 'r').read()   # Read the entire file into a string
output = open("result.txt", 'w')

for match in re.finditer(
    r"""(?mx)          # Verbose regex, ^ matches start of line
    ^T\s+(?P<T>.*)\s*  # Match first line
    ^U\s+(?P<U>.*)\s*  # Match second line
    ^W\s+(?P<W>.*)\s*  # Match third line""", 
    data):
        if "bike" in match.group("W"):
            output.write(match.group())  # outputs entire match
于 2012-05-05T08:08:52.037 に答える
1

ブロックの形式は一定であるため、リストを使用してブロックを保持し、bikeそのブロックにあるかどうかを確認できます。

data = open("OWS.txt", 'r')
output = open("result.txt", 'w')

chunk = []
for line in data:
    chunk.append(line)
    if line[0] == 'W':
        if 'bike' in str(chunk):
            for line in chunk:
                output.write(line)
        chunk = []
于 2012-05-05T10:20:13.407 に答える