복붙노트

[PYTHON] 파일 이름을 file : // URL로 변환합니다.

PYTHON

파일 이름을 file : // URL로 변환합니다.

WeasyPrint의 공용 API에서 HTML 입력에 대한 파일 이름 (다른 유형들도 가능)을받습니다. 내장 open ()에서 작동하는 파일 이름은 모두 작동해야하지만 나중에 urllib.urlopen ()에 전달되는 file : // scheme의 URL로 변환해야합니다.

(모든 것이 내부적으로 URL 형식입니다. urlparse.urljoin ()을 사용하여 상대 URL 참조를 확인하려면 문서에 대한 '기본 URL'이 있어야합니다.)

urllib.pathname2url이 시작입니다.

강조는 광산이지만 완전한 URL이 필요합니다. 지금까지 이것은 작동하는 것 같습니다 :

def path2url(path):
    """Return file:// URL from a filename."""
    path = os.path.abspath(path)
    if isinstance(path, unicode):
        path = path.encode('utf8')
    return 'file:' + urlparse.pathname2url(path)

UTF-8은 RFC 3987 (IRI)에서 권장하는 것으로 보입니다. 하지만이 경우 (URL urllib, 결국) 어쩌면 내가 sys.getfilesystemencoding () 사용해야 사용해야합니까?

그러나 문헌에 근거하여 필자는 파일뿐만 아니라 file : // ...을 생략해야합니다 : Windows에서는 nturl2path.pathname2url ()의 결과가 이미 세 개의 슬래시로 시작됩니다.

그래서 문제는 이것을 수행하고 그것을 크로스 플랫폼으로 만드는 더 좋은 방법이 있는가하는 것입니다.

해결법

  1. ==============================

    1.완성을 위해, Python 3.4+에서 다음을 수행해야합니다.

    완성을 위해, Python 3.4+에서 다음을 수행해야합니다.

    import pathlib
    
    pathlib.Path(absolute_path_string).as_uri()
    
  2. ==============================

    2.나는 문서가 그것을 보증하기에 충분하다고 확신하지는 않지만, 실제로는 제대로 작동한다고 생각한다 :

    나는 문서가 그것을 보증하기에 충분하다고 확신하지는 않지만, 실제로는 제대로 작동한다고 생각한다 :

    import urlparse, urllib
    
    def path2url(path):
        return urlparse.urljoin(
          'file:', urllib.pathname2url(path))
    
  3. ==============================

    3.위의 @danodonovan의 댓글입니다.

    위의 @danodonovan의 댓글입니다.

    Python3의 경우 다음 코드가 작동합니다.

    from urllib.parse import urljoin
    from urllib.request import pathname2url
    
    def path2url(path):
        return urljoin('file:', pathname2url(path))
    
  4. ==============================

    4.당신을 위해 다음이 효과가 있습니까?

    당신을 위해 다음이 효과가 있습니까?

    from urlparse import urlparse, urlunparse
    
    urlunparse(urlparse('yourURL')._replace(scheme='file'))
    
  5. from https://stackoverflow.com/questions/11687478/convert-a-filename-to-a-file-url by cc-by-sa and MIT license