2017-09-13 4 views
-1

正規表現でftpアカウント情報フォームvsftpログを取得したいと思います。 私たちのすべてのアカウントは、user01、user02、user03などのユーザープラスの番号で命名されました。Python Regexは文字列を正しく取得しますが、まだAttributeErrorを持っています

Tue Sep 12 18:11:20 2017 1 ::ffff:172.18.1.168 3620 /ftptest.py a _ i r user01 ftp 0 * c 
Tue Sep 12 18:12:51 2017 1 ::ffff:172.18.1.168 4211 /ftptest.py a _ i r user02 ftp 0 * c 
Tue Sep 12 18:16:43 2017 1 ::ffff:172.18.1.168 4322 /ftptest.py a _ i r user03 ftp 0 * c 

私のコードは以下の通りです:

#!/usr/bin/python 
import re 


with open("/var/log/xferlog") as ftplog: 
    for line in ftplog: 
     line = line.strip("\n") 
     pattern = re.compile(r'user[\d]+') 
     match = pattern.search(line) 
     print match.group() 

結果は、ユーザーのアカウントを取得しますが、エラーメッセージはAttributeErrorを表示することができます:「NoneType」オブジェクトが属性「グループ」

結果を持っていません:

user01 
user02 
user03 
Traceback (most recent call last): 
    File "test8.py", line 10, in <module> 
    print match.group() 
AttributeError: 'NoneType' object has no attribute 'group' 

誰でも私に助言を与えることができますか?

+1

これはエラーを生成するコードではありません。 F.x. 11行目はありません。 – Raffael

+0

私の誤字は残念です。私は2行のテストパターンをインクルードして削除し、アカウント名を切り替えますが、私の投稿でそれを編集するのを忘れました。私はすでにそれを修正しました。本当に申し訳ない。 – Ilikeperl

答えて

1

pattern.search(line)return行に一致するものがない場合はNoneを返します。 あなたのコードはそれに条件を追加する必要があります。

#!/usr/bin/python 
import re 
with open("/var/log/xferlog") as ftplog: 
    for line in ftplog: 
     line = line.strip("\n") 
     pattern = re.compile(r'user[\d]+') 
     match = pattern.search(line) 
     if match: 
      print match.group() 

よろしくお願いします。

+0

アドバイスをいただきありがとうございます。出来た。結果は正しいアカウントを示し、エラーメッセージは消えています。しかし、私は非常に興味深いです、なぜコードは、まだ文字列を取得したが、まだエラーメッセージを表示します。そして、条件文を追加した後、エラーメッセージが消えました。なぜ教えてもらえますか? – Ilikeperl

0

サンプルデータとコードに基づいてuser01、user02、user03を印刷することができませんが、正規表現が値を正しく取り込めないようです。パターンが一致しない場合に対処するためのif文

#!/usr/bin/python 
import re 


with open("sample") as ftplog: 
    for line in ftplog: 
     line = line.strip("\n") 
     pattern = re.compile(r'sparq[\d]+') 
     match = pattern.search(line) 
     if match is None: 
      import pdb; pdb.set_trace() 
     print match.group() 
+0

私の誤字は残念です。私は2行のテストパターンをインクルードして削除し、アカウント名を切り替えますが、私の投稿でそれを編集するのを忘れました。私はすでにそれを修正しました。本当に申し訳ない。 – Ilikeperl

1

使用A:トラブルシューティングを支援するために私はあなたのコードを歩く支援するPython debuggerを使用して使用してお勧めします。

... 
if match: 
    print match.group() # or anything 

ただし、一致しない場合はすべて消音されます。それらを追跡する場合は(デバッグのために)

else: 
    print line 
+0

私を助けてくれてありがとう。出来た。 – Ilikeperl

関連する問題