0

私のコード(これまで):

ins = open( "log", "r" )
array = []
for line in ins:
    array.append( line )

for line in array:
    if "xyz" in line:
        print "xyz found!"
    else:
        print "xyz not found!"

ログ ファイルの例:

Norman xyz Cat
Cat xyz Norman
Dog xyz Dog
etc. etc.

私が現在持っている Python スクリプトは、xyz を見つけて、それを見つけたことを出力します。しかし、私は xyz を見つける以上のことをしたいと思っています。xyz の直前と xyz の直後の単語を検索したい。それが完了したら、ノーマンが「xyz」の前に来た回数と「xyz」の後にノーマンが来た回数を保存できるようにしたいと思います(一時的に、応答にデータベースは必要ありません)(これはすべてに適用されます他の名前や動物も同様です)。

これは純粋に学習課題ですので、回答に至るまでの「プロセス」を含めていただければ幸いです。もしよろしければ、プログラマーのように考える方法を知りたいです。このコードの大部分は、私が Google で見つけたものであり、機能するものが得られるまで一緒にマッシュアップしたものです。私が現在持っているものを書くためのより良い方法があれば、それも感謝します!

ご協力いただきありがとうございます!

4

2 に答える 2

4

「単語」が単に「スペース区切りのトークン」を意味する場合、次を使用して空白で行を分割できます

x, key, y = line.split()

確認key == "xyz"し、そうであれば対策を講じます。

「アクションを起こす」という部分は、明らかに「ものを数える」という意味であり、それcollections.Counterが目的です。の前後の両方をカウントするにはxyz、2 つのカウンターを使用します。

from collections import Counter

before = Counter()
after = Counter()

for line in open("log"):
    x, key, y = line.split()
    if key == "xyz":
        # increment counts of x and y in their positions
        before[x] += 1
        after[y] += 1

# print some statistics
print("Before xyz we found:")
for key, val in before.iteritems():
    print("    %s %s" % (key, val))
# do the same for after

現在のスクリプトは、ファイルを RAM に読み込むのに多くの時間とメモリを浪費しているので、それも修正しました。arrayファイルの行をループするには、中間変数は必要ありません。

于 2013-02-18T17:30:11.730 に答える
0

'abc'.split('b')['a','c']それを念頭に置いて、次のようにコードを変更できます。

ins = open( "log", "r" )
array = []
prefixes = []
suffixes = []
for line in ins:
    array.append( line )

for line in array:
    if "xyz" in line:
            prefixes.append(line.split("xyz")[0])
            suffixes.append(line.split("xyz")[1])
    else:
        print "xyz not found!"

または、何かが xyz の後または前に発生したすべての回数だけを取得したい場合は、Counterを使用できます

from collections import Counter
ins = open( "log", "r" )
array = []
prefixes = Counter()
suffixes = Counter()
for line in ins:
    array.append( line )

for line in array:
    if "xyz" in line:
            prefixes[line.split("xyz")[0]] += 1
            suffixes[line.split("xyz")[1]] += 1
    else:
        print "xyz not found!"
print "prefixes:" + str(prefixes)
print "suffixes:" + str(suffixes)
于 2013-02-18T17:30:22.157 に答える