3

subjectmailto URL を、などを含む素敵なオブジェクトまたは辞書に解析しようとしていますbody。これを実現するライブラリまたはクラスが見つからないようです。何か知っていますか?

mailto:me@mail.com?subject=mysubject&body=mybody
4

7 に答える 7

4

urlparse と parse_qs を使用して、スキームとして mailto を使用して URL を解析できます。ただし、スキーム定義によると、次のことに注意してください。

mailto:me@mail.com,you@mail.com?subject=mysubject

と同じです

mailto:?to=me@mail.com&to=you@mail.com&subject=mysubject

次に例を示します。

from urlparse import urlparse, parse_qs
from email.message import Message

url = 'mailto:me@mail.com?subject=mysubject&body=mybody&to=you@mail.com'
msg = Message()
parsed_url = urlparse(url)

header = parse_qs(parsed_url.query)
header['to'] = header.get('to', []) + parsed_url.path.split(',')

for k,v in header.iteritems():
    msg[k] = ', '.join(v)

print msg.as_string()

# Will print:
# body: mybody
# to: me@mail.com, you@mail.com
# subject: mysubject
于 2015-07-30T20:56:17.840 に答える
2

コアのurlparselibは、mailtosで優れた仕事をしませんが、途中でそれを実現します。

In [3]: from urlparse import urlparse

In [4]: urlparse("mailto:me@mail.com?subject=mysubject&body=mybody")
Out[4]: ParseResult(scheme='mailto', netloc='', path='me@mail.com?subject=mysubject&body=mybody', params='', query='', fragment='')

編集

少しの研究でこのスレッドが発掘されました。結論:PythonのURL解析は最悪です。

于 2012-01-30T17:11:40.693 に答える
1

これがreモジュールを使用した解決策です...

import re

d={}
def parse_mailto(a):
  m=re.search('mailto:.+?@.+\\..+?', a)
  email=m.group()[7:-1]
  m=re.search('@.+?\\..+?\\?subject=.+?&', a)
  subject=m.group()[19:-1]
  m=re.search('&.+?=.+', a)
  body=m.group()[6:]

  d['email']=email
  d['subject']=subject
  d['body']=body

これは、投稿したものと同じ形式であることを前提としています。ニーズに合わせて変更を加える必要がある場合があります。

于 2012-01-30T17:34:38.353 に答える
1

これを行うには、独自の関数を書きたいだけのようです。

編集:これはサンプル関数です(python noobによって作成されました)。

編集2、クリーンアップしてフィードバックを行う:

from urllib import unquote
test_mailto = 'mailto:me@mail.com?subject=mysubject&body=mybody'

def parse_mailto(mailto):
   result = dict()
   colon_split = mailto.split(':',1)
   quest_split = colon_split[1].split('?',1)
   result['email'] = quest_split[0]

   for pair in quest_split[1].split('&'):
      name = unquote(pair.split('=')[0])
      value = unquote(pair.split('=')[1])
      result[name] = value

   return result

print parse_mailto(test_mailto)
于 2012-01-30T17:05:06.403 に答える
0

含まれているバッテリー:urlparse

于 2012-01-30T17:10:46.587 に答える
0
import urllib

query = 'mailto:me@mail.com?subject=mysubject&body=mybody'.partition('?')[2]
print dict((urllib.unquote(s).decode('utf-8') for s in pair.partition('=')[::2])
           for pair in query.split('&'))
# -> {u'body': u'mybody', u'subject': u'mysubject'}
于 2012-01-30T17:32:47.993 に答える
0

そのような特別なライブラリを使用する必要があります

https://pypi.python.org/pypi/urlinfo

Pythonをより良くするために貢献し、問題を作成してください;)

PS Robbert Peters ソリューション bcz を使用していないため、ハッキングされ、適切に動作しません。また、正規表現を使用して、スーパー BFG ガンを使用して小鳥を取得しています。

于 2015-05-14T20:17:41.250 に答える