如何在python中保存文件,因为url包含“?”字符?

问题描述 投票:0回答:1

我仍在学习。也许这个问题对于某些人来说非常简单易行,但我正在试图解决这个小问题。我正在运行多线程和队列来从站点下载.HTML文件。好。当我尝试保存文件时,一切都运行得很好。一旦URL包含特殊字符,(这一个 - >“?”),我无法保存文件...特殊字符是保存文件时允许使用的注释(/:?* <>),右??

网址就是这个。当我用我的用户名和密码加载它时,它是一个html文件。

if __name__ == "__main__":
    urls = ["https://supercarros.com.br/Carros?codigoUC=17342856", "https://supercarros.com.br/Carros?codigoUC=3707466"]
    main(urls)

当我尝试使用这部分代码保存时:

def download_file(self, url): 
    handle = requests.get(url, headers=headers)
    fname = os.path.basename(url + ".htm")
        with open(fname, "wb") as f:
            for chunk in handle.iter_content(chunk_size=1024):
                if chunk:
                    f.write(chunk)
            del handle

我得到了这个回报:

Traceback (most recent call last):
  File "C:\Python3\lib\threading.py", line 916, in _bootstrap_inner
    self.run()
  File "f.py", line 24, in run
    self.download_file(url)
  File "f.py", line 33, in download_file
    with open(fname, "wb") as f:
OSError: [Errno 22] Invalid argument: 'Carros?codigoUC=17342856.htm'

Exception in thread Thread-2:
Traceback (most recent call last):
  File "C:\Python3\lib\threading.py", line 916, in _bootstrap_inner
    self.run()
  File "f.py", line 24, in run
    self.download_file(url)
  File "f.py", line 33, in download_file
    with open(fname, "wb") as f:
OSError: [Errno 22] Invalid argument: 'Carros?codigoUC=3707466.htm'

当然......它不会允许我。我的问题是..我该如何解决这个小问题?如果没有“?”我该怎么做才能保存文件特征,但保留最后一部分“codigoUC = 3707466.htm”

所有帮助表示赞赏。先感谢您

python-3.x queue python-requests python-multithreading
1个回答
0
投票

如果您只想从名称中删除?字符,您可以执行以下操作:

with open(fname.replace('?', ''), "wb") as f:

该文件的名称最终将成为CarroscodigoUC=17342856.htm

如果要删除所有特殊字符,可以使用正则表达式:

import re
fname = re.sub(r'[/:?*<>]', r'', fname)
© www.soinside.com 2019 - 2024. All rights reserved.