2016-04-08 16 views
0

アルファベットの内容を含む単語のみをファイルから読み込み、リストに挿入しようとしています。ファイルの読み込みで特殊文字を無視する

def readWords(x,y): 
    with open(x,'r') as f: 
     for line in f: 
      for word in line.split(): 
       y.append(word) 

firstFile = sys.argv[1] 
firstList = [] 
readWords(firstFile, firstList) 

サンプルファイル:

car */ /*one lemon grass 
food accelerate 

どのように特殊文字(のみアルファベットコンテンツ、句読点記号、または数字)除くすべての単語を読み込むために、これを修正するのですか?つまり最終結果ビーイング:

[car, one, lemon, grass, food, accelerate] 
+1

正規表現は、ここでは最高だろう。 '\ s'条件を使用して特殊文字を取得することができます – Adib

+2

@Adib '\ s'は空白を取り込みます。 –

+0

@Scherfあなたに特別な文字はどれですか? –

答えて

2

スペースや特殊文字をフィルタリングする最も簡単な解決策:

filter(None,re.split(r'\W|\d', bleh)) 

正規表現

'W \' 正規表現式は、基本的に任意の 'キャッチ' を意味します非単語文字、\ dは数字文字をキャッチすることを意味します。あなたは言葉のように持っているのであれば:

バナナ "*#12312シュガー

をそれは完全な非単語の文字をキャッチします:

" *#12312

正規表現関数分割

このコード:それは正規表現主導型だから、それはクールだ以外

re.split(r'\W|\d', bleh) 

は、あなたが使用することを分割に似ている、あなたにいくつかの素晴らしい機能を提供します。

フィルタ機能

は文字通りあなたがしたくないことから、リストをフィルタリングします。だから、FOOがfoo = [ "A"、 "B"、 ""、 "D"]リストであり、このコードで:

filter(None,foo) 

それは基本的にリストの内部に見え、 'のインスタンスを見つけますNone 'を選択し、リストからポップ/削除します。

全コード:

import re 
bleh = """"car */12314 34234 /*one 123123lemon grass 
food accelerate 
""" 
print filter(None,re.split(r'\W|\d', bleh)) 

結果:

['car', 'one', 'lemon', 'grass', 'food', 'accelerate'] 

独自のコードと

import re 
def readWords(x,y): 
    with open(x,'r') as f: 
     for line in f: 
      //Append to y 
      y += filter(None,re.split(r'\W|\d', line)) 

firstFile = sys.argv[1] 
firstList = [] 
readWords(firstFile, firstList) 
+1

一致する件数を減らすために '\ W +'に分割します。 – user3159253

+0

@ user3159253良い推薦! – Adib

+1

これは、各単語を独自のリストにラップしているようです。また、別のファイルでテストしても、数字の読み込みが妨げられることはありません。 ['21333']のような結果を得る – Scherf

関連する問題