2016-07-05 12 views
0

私は解決に苦しんでいる奇妙な問題に遭遇しました。 re.findall()を.txtファイルで実行した後、結果を印刷して書き込もうとします。私が期待している結果はすべて表示されますが、さまざまな形式で表示されます。 (私が以前に見つかった同様のスレッドから変更された)コード:単一のポリリニアストリングを.txtの複数の行に書き込む

import re 

with open ('test.txt') as text: 
    text = text.read() 
match = re.findall(r'[\w\.-][email protected][\w\.-]+', text) 
for i in match: 
    with open ('list.txt', 'a') as dest: 
     i = str(i) 
     print(i) 
     dest.write(i) 

インタプリタは、結果を生成します。

[email protected] 
[email protected] 
[email protected] 

私はそれが何を期待するまさにである、コンテンツの与えられましたtest.txt。 しかし、list.txtには、読み取ります

(generic existing text goes here) 
[email protected]@[email protected] 

私はそれをしたい(そして、それが必要と考えている)しながら、は

(generic existing text goes here) 
[email protected] 
[email protected] 
[email protected] 

を読んで、私はstr.write()の代わりにstr.writelines.()を使用して試してみたが、これは有用ではなかったです。 print()str.write()の違いは、このあいまいさを引き起こしており、どのように回避しているのでしょうか。

N.B.私は99%のライン8 i = str(i)が目的を果たしていないことを確信していますが、それは私がやっていることだから残しました。本当にわからない理由...

答えて

1

最後のコメントから始めます。 str(i)は、iを文字列表現(iのクラス__str__メソッドで定義されています)に変換します。 str(4)に電話すると、例えば'4'となります。この場合、re.findallは文字列リストas per the documentationを返すため、これは不要です。

あなたの実際の問題については、改行がありません。私はあなたよりも少ない回数だけファイルを開くことを好むでしょう。

はおそらく試してみてください。

import re 

with open ('test.txt') as text: 
    text = text.read() 
match = re.findall(r'[\w\.-][email protected][\w\.-]+', text) 
with open('list.txt', 'a') as dest: 
    for i in match: 
     print(i) 
     dest.write(i + '\n') 

(あなたはまた、print(i)行を削除することができますが、コンソールに書き込みが行われるたびに出力を表示したくない場合。)

+0

おかげでチームメイト!私は無駄にする前にそれを試してみたと思った...スペースやそのような素人なものを忘れている必要があります。とにかく、これはまさに私が探していたものです。 –

+0

あなたがgrokできる前に卵になることを得なさい。ハッピーコーディング! :) –

関連する問題