Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #38341
| From | Peter Otten <__peter__@web.de> |
|---|---|
| Subject | Re: Curious to see alternate approach on a search/replace via regex |
| Date | 2013-02-07 10:49 +0100 |
| Organization | None |
| References | <20130206134105.9352d665e1f8d0719021fcf9@lavabit.com> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.1444.1360230550.2939.python-list@python.org> (permalink) |
rh wrote:
> I am curious to know if others would have done this differently. And if so
> how so?
>
> This converts a url to a more easily managed filename, stripping the
> http protocol off.
>
> This:
>
> http://alongnameofasite1234567.com/q?sports=run&a=1&b=1
>
> becomes this:
>
> alongnameofasite1234567_com_q_sports_run_a_1_b_1
>
>
> def u2f(u):
> nx = re.compile(r'https?://(.+)$')
> u = nx.search(u).group(1)
> ux = re.compile(r'([-:./?&=]+)')
> return ux.sub('_', u)
>
> One alternate is to not do the compile step. There must also be a way to
> do it all at once. i.e. remove the protocol and replace the chars.
Completely without regular expressions:
import string
ILLEGAL = "-:./?&="
try:
TRANS = string.maketrans(ILLEGAL, "_" * len(ILLEGAL))
except AttributeError:
# python 3
TRANS = dict.fromkeys(map(ord, ILLEGAL), "_")
PROTOCOLS = {"http", "https"}
def url_to_file(url):
protocol, sep, rest = url.partition("://")
if protocol not in PROTOCOLS:
raise ValueError
return rest.translate(TRANS)
if __name__ == "__main__":
url = "http://alongnameofasite1234567.com/q?sports=run&a=1&b=1"
print(url)
print(url_to_file(url))
Back to comp.lang.python | Previous | Next | Find similar | Unroll thread
Re: Curious to see alternate approach on a search/replace via regex Peter Otten <__peter__@web.de> - 2013-02-07 10:49 +0100
csiph-web