【问题标题】:Opening Local File Works with urllib but not with urllib2打开本地文件适用于 urllib 但不适用于 urllib2
【发布时间】:2013-12-13 03:29:30
【问题描述】:

我正在尝试使用 urllib2 打开一个本地文件。我该怎么做呢?当我使用 urllib 尝试以下行时:

resp = urllib.urlopen(url)

它可以正常工作,但是当我将其切换到:

resp = urllib2.urlopen(url)

我明白了:

ValueError: unknown url type: /path/to/file

该文件确实退出的位置。

谢谢!

【问题讨论】:

    标签: python urllib2 urllib


    【解决方案1】:

    只要把"file://"放在路径前面

    >>> import urllib2
    >>> urllib2.urlopen("file:///etc/debian_version").read()
    'wheezy/sid\n'
    

    【讨论】:

    • @JasonBaldwin:如果路径包含百分比字符,它可能会中断。使用urllib.quote() 避免它:'file://' + urllib.quote(abspath(path))
    • @AntoinePelisse,我认为这会超出urlopen() 的责任。如果你有相对路径,你应该使用os.path.abspath()
    • 在 Windows 10、python 3.7.4、urlopen 1.0.0 上运行,为了在程序运行的同一路径上获取文件,需要提供一个 url,如“file:./ "
    • 万一它不适用于其他人......你实际上需要3个反斜杠......'file:///' + os.path.asbpath('file.html')为我工作。当然记得在顶部也import os
    【解决方案2】:

    在 urllib.urlopen 方法中:如果 URL 参数没有方案标识符,它将打开一个本地文件。但 urllib2 的行为并非如此。

    所以,urllib2 方法处理不了。

    在 url 参数的两个方法调用中都包含“file://”模式标识符总是好的。

    【讨论】:

    • 感谢您的解释!
    • 另一方面,open 不会理解 file:// 前缀。
    【解决方案3】:

    我遇到了同样的问题,实际上,我刚刚意识到,如果您下载页面的源代码,然后在 chrome 上打开它,您的浏览器将在 url 栏上显示确切的本地路径。祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-04
      • 2015-10-05
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多