2017-01-25 8 views
0

テキストファイルのすべての電子メールアドレスを乱数で置き換えたいと思います。今、私はそれらのメールを発見したが、それらはすべて正規表現re.findall()Python - リストからの電子メールを番号で置き換えます。

は、例えば、出力が似ていることによって、リストに返されます。だから、

['[email protected]'] 

私がすることで、この出力を交換しようとすると、

with open('a.txt', 'r') as file1: 
    with open('b.txt', 'w') as file2: 
     for line in file1: 
      email = re.findall(......,line) 
      file2.write(line.replace(email, random.random())) 

そして:ランダムな数字が、私は私のコードはここにある

Can't convert 'list' object to str implicitly 

を言ってエラーになるだろう残りのコードはここでは使用しないので省略されています。だから、誰も私にこのリストを扱う方法を教えてもらえますか? str()で明示的にリストをstringに強制しようとしましたが、失敗しました。

答えて

0

reモジュールがあなたのためにすべての仕事をすることによってリストオブジェクトを変換することは避けてください。 re.subまたはregexパターンobject.subは、パターンに一致する部分文字列を正規表現マッチオブジェクトを入力として受け取る関数の出力と置き換えます。

メールで
#pass each line through this: 
def mask_matches(string, regex): 
    ''' substrings of string that match regular expressions pattern object regex 
    are replaced with random.random(). 
    ''' 
    def repl(mobj): 
     replacement = random.random() 
     return(replacement) 
    return(regex.sub(repl, string)) 

#so if `email` is your regex pattern object, thenyour last line looks something like this: 
file2.write(mask_matches(line, email)) 
+0

感謝。しかし、私は "AttributeError: 'list'オブジェクトに" sub "という属性がありません" return(regex.sub(repl、string)) – Parker

+0

私はコードコメントで説明しようとしたので、私が提案したコードは、あなたの 'email'リスト()を参照するつもりではありません。残念ですが、私は'コピー&ペースト 'できるだけの十分な距離を置いていませんでした。' email'は正規表現パターンオブジェクト最初に 'email = re.findall'で始まる行の代わりに、' email = re.compile'で始まる行を指定する必要があります。正規表現を表示しないでくださいパターンをコピーしてその行を置き換えるコピー&ペーストコードを書くことはできません – RichardB

0

てみループと交換する、など: - このため

with open('a.txt', 'r') as file1: 
    with open('b.txt', 'w') as file2: 
     for line in file1: 
      email = re.findall(......,line) 
      for em in email: 
       file2.write(line.replace(em, random.random())) 
+0

これはありがとう、私はすでにこれを試して、 "float 'オブジェクトをstrに暗黙に変換できません" – Parker

+0

私はdidn'これを実行すると、問題が発生する可能性があります。最後の行を変更する必要があります。このように使用し、実行に成功しました.replace(em、ra ndom.random())次の行にfile2.write(STR(line)) –

関連する問題