Reputation: 252
I'm working with URLs and sometimes end up with random repeated phrases in them that are throwing off my scripts. I'd like to remove the duplicates.
So, I start with something like this:
url = "https://account.live.com/consent/Manage?fn=email&uaid=51e2193a466c4846a4317b94931b9086&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US"
And want to convert that to:
url = "https://account.live.com/consent/Manage?fn=email&uaid=51e2193a466c4846a4317b94931b9086&lc=1033&id=38936&mkt=en-US"
All of the solutions I've looked at rely on the spaces between words or the repeating pattern coming at the beginning of the string. In my situation, the repeating pattern(s) don't have those boundaries to base my grouping on.
How can I do this?
Upvotes: 1
Views: 80
Reputation: 51044
The first step is going to be to extract the query string and split
it into separate parts on the &
character; the last step is going to be to join
the parts back together with &
.
Assuming the duplicates always appear adjacent to each other like in your example input, you can filter them out using itertools.groupby
to retain the original order:
import itertools
def remove_duplicate_params(url):
path, _, query_string = url.partition('?')
parts = query_string.split('&')
return path + '?' + '&'.join(k for k, _ in itertools.groupby(parts))
# 'https://account.live.com/consent/Manage?fn=email&uaid=51e2193a466c4846a4317b94931b9086&lc=1033&id=38936&mkt=en-US'
If the duplicates might not be adjacent, and you don't need to preserve the order of the parameters in the query string, you can use set
to remove the duplicates:
def remove_duplicate_params(url):
path, _, query_string = url.partition('?')
parts = query_string.split('&')
return path + '?' + '&'.join(set(parts))
# 'https://account.live.com/consent/Manage?fn=email&mkt=en-US&lc=1033&id=38936&uaid=51e2193a466c4846a4317b94931b9086'
Upvotes: 2