コンテンツにスキップ

未翻訳のページ

このページはまだ日本語に翻訳されていないため、英語の原文を表示しています。 翻訳に協力する

nturl2path Module Complexity

The nturl2path module converts between Windows file system paths and the path part of a file: URL. It is pure Python and imports on every platform, so it converts Windows paths on Linux and macOS too.

Deprecated in Python 3.14

Importing the module emits a DeprecationWarning from Python 3.14, and it is slated for removal in Python 3.19. The warning points to urllib.request, whose url2pathname() and pathname2url() convert for the platform they run on.

n is the characters in the argument, and c is the path components in it, the pieces between its separators.

Complexity Reference

Functions

Operation Time Space Notes
nturl2path.url2pathname(url) O(n) O(n) Accepts a colon or the older pipe after a drive letter, and decodes %XX escapes. O(n·c) on 3.11, 3.12.0-3.12.7 and 3.13.0 when the URL has a drive letter
nturl2path.pathname2url(p) O(n) O(n) A drive path becomes ///C:/..., with an empty authority, and unsafe characters become %XX escapes. O(n·c) on 3.11, 3.12.0-3.12.7 and 3.13.0 when the path has a drive letter

Converting Paths

Drive Paths

import warnings

with warnings.catch_warnings():
    warnings.simplefilter('ignore', DeprecationWarning)  # Python 3.14+
    import nturl2path

url = nturl2path.pathname2url('C:\\My Files\\café.txt')  # O(n)
assert url == '///C:/My%20Files/caf%C3%A9.txt'

path = nturl2path.url2pathname(url)  # O(n)
assert path == 'C:\\My Files\\café.txt'

# The older pipe spelling of the drive is accepted too
assert nturl2path.url2pathname('/C|/Users/Alice/file.txt') == 'C:\\Users\\Alice\\file.txt'

Network Shares

A URL path whose authority names a server becomes a UNC path.

import warnings

with warnings.catch_warnings():
    warnings.simplefilter('ignore', DeprecationWarning)  # Python 3.14+
    import nturl2path

path = nturl2path.url2pathname('//server/share/file.txt')  # O(n)
assert path == '\\\\server\\share\\file.txt'

The Deprecation

The warning fires when the module is first imported in a process; calling its functions does not warn.

import sys
import warnings

with warnings.catch_warnings(record=True) as caught:
    warnings.simplefilter('always')
    import nturl2path  # O(1) - defines two functions

deprecated = [w for w in caught if issubclass(w.category, DeprecationWarning)]
assert bool(deprecated) == (sys.version_info >= (3, 14))

with warnings.catch_warnings(record=True) as caught:
    warnings.simplefilter('always')
    nturl2path.url2pathname('/C:/x')

assert caught == []

Performance Best Practices

✅ Do:

  • Call urllib.request.url2pathname() and urllib.request.pathname2url() on Windows, which is what the deprecation asks for

❌ Avoid:

  • Importing nturl2path in new code: it warns from 3.14 and is slated for removal in 3.19
  • Converting paths with thousands of components before 3.12.8 and 3.13.1, where a drive path costs O(n·c) rather than O(n)

Version Notes

  • Python 3.12.8+ and 3.13.1+: Drive paths and URLs convert in O(n), not O(n·c)
  • Python 3.14+: Importing the module emits a DeprecationWarning; removal is slated for Python 3.19
  • urllib - url2pathname() and pathname2url() for the running platform, the replacement the deprecation points to
  • ntpath - splits and joins Windows paths on any platform