在python中将url另存为文件名

2024-05-12 22:16:22 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我对python很陌生,如果你考虑投反对票,请留下评论

我有一个网址,比如

http://example.com/here/there/index.html

现在我想在一个目录中保存一个文件及其内容。我希望文件名为:

http://example.com/here/there/index.html

但是我得到了错误,我猜错误是由于url名称中的/造成的。在

这就是我现在正在做的。在

        with open('~/' + response.url, 'w') as f:
            f.write(response.body)

你知道我该怎么做吗?在


Tags: comhttpurlindexhereexampleresponsehtml
3条回答

你有几个问题。其中之一是unixshell缩写(~)不会像在unixshell中那样被Python自动解释。在

第二个问题是,在Unix中编写一个嵌入斜杠的文件路径不会有好运气。如果你想在以后找到它们的话,你需要把它们转换成别的东西。您可以使用像response.url.replace('/','_')这样简单的东西来实现,但这会给您留下许多其他可能存在问题的字符。您可能希望一次性“消毒”所有这些。例如:

import os
import urllib

def write_response(response, filedir='~'):
    filedir = os.path.expanduser(dir)
    filename = urllib.quote(response.url, '')
    filepath = os.path.join(filedir, filename)
    with open(filepath, "w") as f:
        f.write(response.body)

它使用os.path函数来清理文件路径,并使用urllib.quote将URL清理为适合文件名的内容。有一个对应的unquote来逆转这个过程。在

最后,当您写入文件时,您可能需要根据响应是什么以及您希望如何编写它们而稍微调整一下。如果您希望它们以二进制形式编写,则需要"wb"而不仅仅是{}作为文件模式。或者如果是文本,它可能需要某种编码(例如,to utf-8)。这取决于你的回答是什么,以及它们是如何编码的。在

使用urllib.urlretrieve:

    import urllib

    testfile = urllib.URLopener()
    testfile.retrieve("http://example.com/here/there/index.html", "/tmp/index.txt")

您可以使用可逆的base64编码。在

>>> import base64
>>> base64.b64encode('http://example.com/here/there/index.html')
'aHR0cDovL2V4YW1wbGUuY29tL2hlcmUvdGhlcmUvaW5kZXguaHRtbA=='
>>> base64.b64decode('aHR0cDovL2V4YW1wbGUuY29tL2hlcmUvdGhlcmUvaW5kZXguaHRtbA==')
'http://example.com/here/there/index.html'

或者binascii

^{pr2}$

相关问题 更多 >