2016-05-29 16 views
0

なぜこれが機能しないのですか?私は、ファイルに書き込む前に、私はのREST APIから取得した結果ユニークにしたい -ファイルに書き込む前の一意の文字列 - python

MISP_HOST="https://192.168.1.8" 
API_KEY="asdfasdfas" 
EXPORT_DATA="attributes/text/download/md5" 
OUTPUT_FILE="md5-"+today 

def main(): 
    URL="%s/%s" % (MISP_HOST, EXPORT_DATA) 
    request = urllib2.Request(URL) 
    f = open(OUTPUT_FILE,'w') 
    request.add_header('Authorization', API_KEY) 
    data = urllib2.urlopen(request).read() 
    set(data) 
    print type(data) 
    f.write(data) 
    f.close() 

それはエラーなしで動作しますが、データは間違いなくユニークではありません。私はbashでこれをしないようにしています。どうしてそれがうまくいかない理由を説明できますか?どうもありがとう!!!

+0

「ユニークな結果」とはどういう意味ですか?結果の各単語を1回表示しますか?結果はプレーンテキストですか? – tdelaney

+3

作成されたセットを実際に保持するために、 'data = set(data)'を実行します。ただし、 'data'は単なる文字列なので、' set(data) 'はあなたが期待することをしません。最初にデータを解析する必要があります。 – poke

答えて

2

結果がプレーンテキストの場合は、正規表現を使用してテキスト内のすべての単語を検索し、そこからセットを作成できます。この例では、単語が大文字小文字を区別せず、各単語をそれぞれの行に書き込むように単語を小文字にしています。

import re 

MISP_HOST="https://192.168.1.8" 
API_KEY="asdfasdfas" 
EXPORT_DATA="attributes/text/download/md5" 
OUTPUT_FILE="md5-"+today 
def main(): 
    URL="%s/%s" % (MISP_HOST, EXPORT_DATA) 
    request = urllib2.Request(URL) 
    f = open(OUTPUT_FILE,'w') 
    request.add_header('Authorization', API_KEY) 
    data = urllib2.urlopen(request).read() 
    unique = set(word.lower() for word in re.findall(r'\w+', data)) 
    # that could be expanded to 
    # wordlist = re.findall(r'\w+', data) 
    # unique = set(word.lower() for word in wordlist) 
    print type(unique) 
    f.write('\n'.join(unique)) 
    f.close() 
+0

が動作しますが、なぜ文字列をリストに変換してからセットに変換できないのかまだ分かりません。 – Dpitt1968

+0

この例では、文字列をリストに変換しませんでした。文字列をリストに変換するときは、文字列の形式とリストの形式を尋ねる必要があります。私は、「データ」は平文で、あなたはその単語を抽出したいと思っていました。それが 're.findall'のやり方です。それは文字列中のすべての単語のリスト( '\ w +'式がするもの - 単語を構成するすべての文字と一致するもの)を作成しました。私は、このリストの項目を小文字に変換してセットを作成するジェネレータを作成することで、もう少し複雑にしました。 – tdelaney

関連する問題