2016-04-01 16 views
0

Pythonのpattern.webモジュールを使用して、いくつかの基本的なWebマイニングタスクを実行しています。最初の15個のキーワードのみを抽出し、各キーワードにカンマ","を追加しようとしています。だから、私の結果のファイルがどのようなキーワードのリストが含まれます。今すぐDOMの文書解析:条件に基づいてカンマの追加と削除

scallops, scallop shells, sea scallops, scallop shell, how to cook scallops, scallop shells for sale, frozen scallops, fresh scallops, dry scallops, cooking scallops, baptism shell, scallop recipe, large scallop shells, diver scallops, bay scallops, 

が、私はカンマをしたくない"," /最後の15日キーワードの後"bay scallops," が、私は以下の私のコードを変更するために少しの助けを必要とするので、 15回目の反復でコードはコンマを追加しません。ループを繰り返す単純なループの場合は、iteritems()を使用してキーと値を抽出し、if条件を追加することができますが、ここではどのように行うのかわかりません。

from pattern.web import URL, DOM, plaintext, extension 

folder = '../some_folder' 

dom = DOM(content) 
print "traversing ... " 
for e in dom('td.spgb-f')[:15]: 
    for a in e('span.sptc-e'): 
     File = open(os.path.join(folder, "meta_keywords.html"), mode="a") 
     print ('adding %s' %(plaintext(a.content))) 
     File.write(plaintext(a.content) + ", ") 
     File.close() 

答えて

2

すべての反復でコンマ(区切り記号)を追加することを考えるのではなく、空白として開始して最初の区切り文字の最後にコンマの値として設定されている、あなたのループの反復。

separator='' 
for e in dom('td.spgb-f')[:15]: 
    for a in e('span.sptc-e'): 
     ... 
     print (separator + 'adding %s' %(plaintext(a.content))) 
     separator = ', ' 
+0

私が投稿する前にあなたの答えが表示されませんでした。私のものは本質的に同じです。 :) –

1

の代わりにコンマなしで、リストに追加し、ファイルに書き込まれる文字列を作成するために", ".join(your_list_here)を使用することができ、ファイルに個々の文字列を書き込みます。 joinメソッドは、要素の間にカンマを配置する処理を行います。

3

私はラウロの答えをお勧めしますが、いくつかのケースでは、そのようなリストは、メモリ内に収まらない可能性がありますし、「ストリーミング」のアプローチが優れています。

その後、あなたの代わりにこれを試すことができます。

first = True 
file = open(...) 
for a in e('span.sptc-e'): 
    if not first: 
     file.write(", ") 
    file.write(plaintext(a.content) + ", ") 
    first = False 
file.close() 

をあなたは開口部を維持し、必要でないファイルを閉じます。ループの前に開くことができます。これを行う最善の方法は、しばしば「with」ブロックを使用することです:

with open(...) as file: 
    file.write(...) 
# The file is automatically closed after the block 
+0

私はあなたに投票しました –

+0

ありがとう、私はそれを感謝します。 –

関連する問題