add `replace()` method
- Dominant language
- Python
- Stars
- 2.8k
- Forks
- 165
- PR merge metrics
- No merged PRs in 30d
Description
It would be great if there would be a replace method, so that:
>> furl(`http:\\example.com\?a=1&b=2`).replace({'a':100}).url
would output: `http:\\example.com\?a=100&b=2`
A remove and add would change the order of things:
>> furl(`http:\\example.com\?a=1&b=2`).remove('a').add({'a':100}).url
would output `http:\\example.com\?b=2&a=100`, instead
Although ***`http:\\example.com\?a=100&b=2` is equivalent to `http:\\example.com\?b=2&a=100`*** according to the the standards, in practice, it is useful to keep order when you end with millions of URLs and you want to keep things organized for data processing. I currently have a pandas dataframe (`df`) in which I use apply to modify a ***subset*** of rows with apply:
```
df.loc[criteria, ['url', 'value']].apply(lambda x: furl(x).remove('a').add('{a: 100}'), axis=1)
```
However, this would change the "order" of the URL in the subset of criteria, as compared to all the rest.
so, I created the following function to circumvent the problem:
```
from furl import furl
def replace_param(url, param, value):
_f = furl(url)
_f.args[param] = value
return _f.url
# small test
replace_param("http:\\example.com\?a=1&b=2", 'a', 100)
# pandas usage
df.loc[criteria, ['url', 'value']].apply(lambda x: furl(x).replace_param('a', 100), axis=1)
```
I know the internals of `furl` could easily support the `replace` function, so this should be fairly easy to implement.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.