【问题标题】:Use url as filename使用 url 作为文件名
【发布时间】:2021-06-29 18:25:54
【问题描述】:

我在 python 中有一个 url,并且想将其转换为合适的文件名。我开始用“_”替换“/”,如下所示:

def encode_url(url):
    return url.replace("/", "_").replace(":", "#") + ".png"

我还希望能够将文件名解码为原始网址:

def decode_filename(filename):
    n_url = ""
    for i in filename:
        if i == "#":
            n_url += ":"
        elif i == "_":
            n_url += "/"
        else:
            n_url += i
    return n_url

但是,如果 url 是这样的,这将不起作用:

“https://example.com/example_example_example”

我需要一种编码和解码方法,它不会超过适用于任何给定 url 的字符限制。 (如果存在)

base64 或 hex 编码的问题是 url 经常超过字符限制 255。

我正在用 python 制作一个监控器应用程序来记录站点的变化。我正在比较图像的变化。我将 json 中的链接存储在 config.json 中,然后使用 encode_url() 方法将图像存储在文件夹中。

当用户删除链接时,需要从 config.json 和包含图片的文件夹中删除。因此,我需要将 url 编码为 reversebale 的方法,以便删除图像文件。

如果有比这更好的解决方案,我也会接受这个作为答案。

【问题讨论】:

    标签: python encoding character-encoding decoding


    【解决方案1】:
    def encode_url(url):
        return url.replace("/", "$").replace(":", "#") + ".png"
    
    def decode_filename(filename):
        return filename.replace('#',':').replace('$','_')
    

    【讨论】:

    • 哈哈,没想到“$”这个字符。谢谢:)
    • 其实你可以使用除/\:*"以外的任何UTF-16字符?|以及NUL
    • 两大问题! 1. 有许多其他字符不适合文件名:mtu.edu/umc/services/websites/writing/characters-avoid 2. 包含 $# 的 URL 解码失败
    猜你喜欢
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 2016-01-17
    • 2015-01-12
    • 1970-01-01
    相关资源
    最近更新 更多