Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
15e22e1c
Commit
15e22e1c
authored
Dec 05, 1997
by
Guido van Rossum
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added doc strings and reindented according to new standard, without tabs.
parent
7f973288
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
223 additions
and
189 deletions
+223
-189
Lib/ntpath.py
Lib/ntpath.py
+223
-189
No files found.
Lib/ntpath.py
View file @
15e22e1c
# Module 'ntpath' -- common operations on DOS pathnames
# Module 'ntpath' -- common operations on WinNT/Win95 pathnames
"""Common pathname manipulations, WindowsNT/95 version.
Instead of importing this module
directly, import os and refer to this module as os.path.
"""
import
os
import
os
import
stat
import
stat
...
@@ -13,6 +17,8 @@ _normtable = string.maketrans(string.uppercase + "\\/",
...
@@ -13,6 +17,8 @@ _normtable = string.maketrans(string.uppercase + "\\/",
string
.
lowercase
+
os
.
sep
*
2
)
string
.
lowercase
+
os
.
sep
*
2
)
def
normcase
(
s
):
def
normcase
(
s
):
"""Normalize case of pathname. Makes all characters lowercase and all
slashes into backslashes"""
return
string
.
translate
(
s
,
_normtable
)
return
string
.
translate
(
s
,
_normtable
)
...
@@ -23,6 +29,7 @@ def normcase(s):
...
@@ -23,6 +29,7 @@ def normcase(s):
# a slash or backslash.
# a slash or backslash.
def
isabs
(
s
):
def
isabs
(
s
):
"""Test whether a path is absolute"""
s
=
splitdrive
(
s
)[
1
]
s
=
splitdrive
(
s
)[
1
]
return
s
!=
''
and
s
[:
1
]
in
'/
\
\
'
return
s
!=
''
and
s
[:
1
]
in
'/
\
\
'
...
@@ -30,6 +37,7 @@ def isabs(s):
...
@@ -30,6 +37,7 @@ def isabs(s):
# Join two (or more) paths.
# Join two (or more) paths.
def
join
(
a
,
*
p
):
def
join
(
a
,
*
p
):
"""Join two or more pathname components, inserting "
\
\
" as needed"""
path
=
a
path
=
a
for
b
in
p
:
for
b
in
p
:
if
isabs
(
b
):
if
isabs
(
b
):
...
@@ -45,6 +53,8 @@ def join(a, *p):
...
@@ -45,6 +53,8 @@ def join(a, *p):
# colon) and the path specification.
# colon) and the path specification.
# It is always true that drivespec + pathspec == p
# It is always true that drivespec + pathspec == p
def
splitdrive
(
p
):
def
splitdrive
(
p
):
"""Split a pathname into drive and path specifiers. Returns a 2-tuple
"(drive,path)"; either part may be empty"""
if
p
[
1
:
2
]
==
':'
:
if
p
[
1
:
2
]
==
':'
:
return
p
[
0
:
2
],
p
[
2
:]
return
p
[
0
:
2
],
p
[
2
:]
return
''
,
p
return
''
,
p
...
@@ -57,6 +67,8 @@ def splitdrive(p):
...
@@ -57,6 +67,8 @@ def splitdrive(p):
# The resulting head won't end in '/' unless it is the root.
# The resulting head won't end in '/' unless it is the root.
def
split
(
p
):
def
split
(
p
):
"""Split a pathname. Returns tuple "(head, tail)" where "tail" is
everything after the final slash. Either part may be empty"""
d
,
p
=
splitdrive
(
p
)
d
,
p
=
splitdrive
(
p
)
slashes
=
''
slashes
=
''
while
p
and
p
[
-
1
:]
in
'/
\
\
'
:
while
p
and
p
[
-
1
:]
in
'/
\
\
'
:
...
@@ -84,6 +96,8 @@ def split(p):
...
@@ -84,6 +96,8 @@ def split(p):
# It is always true that root + ext == p.
# It is always true that root + ext == p.
def
splitext
(
p
):
def
splitext
(
p
):
"""Split the extension from a pathname. Extension is everything from the
last dot to the end. Returns "(root, ext)", either part may be empty"""
root
,
ext
=
''
,
''
root
,
ext
=
''
,
''
for
c
in
p
:
for
c
in
p
:
if
c
in
[
'/'
,
'
\
\
'
]:
if
c
in
[
'/'
,
'
\
\
'
]:
...
@@ -103,18 +117,21 @@ def splitext(p):
...
@@ -103,18 +117,21 @@ def splitext(p):
# Return the tail (basename) part of a path.
# Return the tail (basename) part of a path.
def
basename
(
p
):
def
basename
(
p
):
"""Returns the final component of a pathname"""
return
split
(
p
)[
1
]
return
split
(
p
)[
1
]
# Return the head (dirname) part of a path.
# Return the head (dirname) part of a path.
def
dirname
(
p
):
def
dirname
(
p
):
"""Returns the directory component of a pathname"""
return
split
(
p
)[
0
]
return
split
(
p
)[
0
]
# Return the longest prefix of all list elements.
# Return the longest prefix of all list elements.
def
commonprefix
(
m
):
def
commonprefix
(
m
):
"Given a list of pathnames, returns the longest common leading component"
if
not
m
:
return
''
if
not
m
:
return
''
prefix
=
m
[
0
]
prefix
=
m
[
0
]
for
item
in
m
:
for
item
in
m
:
...
@@ -130,6 +147,7 @@ def commonprefix(m):
...
@@ -130,6 +147,7 @@ def commonprefix(m):
# This will always return false on systems where posix.lstat doesn't exist.
# This will always return false on systems where posix.lstat doesn't exist.
def
islink
(
path
):
def
islink
(
path
):
"""Test for symbolic link. On WindowsNT/95 always returns false"""
return
0
return
0
...
@@ -137,6 +155,7 @@ def islink(path):
...
@@ -137,6 +155,7 @@ def islink(path):
# This is false for dangling symbolic links.
# This is false for dangling symbolic links.
def
exists
(
path
):
def
exists
(
path
):
"""Test whether a path exists"""
try
:
try
:
st
=
os
.
stat
(
path
)
st
=
os
.
stat
(
path
)
except
os
.
error
:
except
os
.
error
:
...
@@ -149,6 +168,7 @@ def exists(path):
...
@@ -149,6 +168,7 @@ def exists(path):
# for the same path.
# for the same path.
def
isdir
(
path
):
def
isdir
(
path
):
"""Test whether a path is a directory"""
try
:
try
:
st
=
os
.
stat
(
path
)
st
=
os
.
stat
(
path
)
except
os
.
error
:
except
os
.
error
:
...
@@ -161,6 +181,7 @@ def isdir(path):
...
@@ -161,6 +181,7 @@ def isdir(path):
# for the same path.
# for the same path.
def
isfile
(
path
):
def
isfile
(
path
):
"""Test whether a path is a regular file"""
try
:
try
:
st
=
os
.
stat
(
path
)
st
=
os
.
stat
(
path
)
except
os
.
error
:
except
os
.
error
:
...
@@ -171,6 +192,7 @@ def isfile(path):
...
@@ -171,6 +192,7 @@ def isfile(path):
# Are two filenames really pointing to the same file?
# Are two filenames really pointing to the same file?
def
samefile
(
f1
,
f2
):
def
samefile
(
f1
,
f2
):
"""Test whether two pathnames reference the same actual file"""
s1
=
os
.
stat
(
f1
)
s1
=
os
.
stat
(
f1
)
s2
=
os
.
stat
(
f2
)
s2
=
os
.
stat
(
f2
)
return
samestat
(
s1
,
s2
)
return
samestat
(
s1
,
s2
)
...
@@ -181,6 +203,8 @@ def samefile(f1, f2):
...
@@ -181,6 +203,8 @@ def samefile(f1, f2):
# XXX THIS IS BROKEN UNDER DOS! ST_INO seems to indicate number of reads?
# XXX THIS IS BROKEN UNDER DOS! ST_INO seems to indicate number of reads?
def
sameopenfile
(
fp1
,
fp2
):
def
sameopenfile
(
fp1
,
fp2
):
"""Test whether two open file objects reference the same file (may not
work correctly)"""
s1
=
os
.
fstat
(
fp1
.
fileno
())
s1
=
os
.
fstat
(
fp1
.
fileno
())
s2
=
os
.
fstat
(
fp2
.
fileno
())
s2
=
os
.
fstat
(
fp2
.
fileno
())
return
samestat
(
s1
,
s2
)
return
samestat
(
s1
,
s2
)
...
@@ -190,6 +214,7 @@ def sameopenfile(fp1, fp2):
...
@@ -190,6 +214,7 @@ def sameopenfile(fp1, fp2):
# describing the same file?
# describing the same file?
def
samestat
(
s1
,
s2
):
def
samestat
(
s1
,
s2
):
"""Test whether two stat buffers reference the same file"""
return
s1
[
stat
.
ST_INO
]
==
s2
[
stat
.
ST_INO
]
and
\
return
s1
[
stat
.
ST_INO
]
==
s2
[
stat
.
ST_INO
]
and
\
s1
[
stat
.
ST_DEV
]
==
s2
[
stat
.
ST_DEV
]
s1
[
stat
.
ST_DEV
]
==
s2
[
stat
.
ST_DEV
]
...
@@ -198,6 +223,7 @@ def samestat(s1, s2):
...
@@ -198,6 +223,7 @@ def samestat(s1, s2):
# XXX This degenerates in: 'is this the root?' on DOS
# XXX This degenerates in: 'is this the root?' on DOS
def
ismount
(
path
):
def
ismount
(
path
):
"""Test whether a path is a mount point"""
return
isabs
(
splitdrive
(
path
)[
1
])
return
isabs
(
splitdrive
(
path
)[
1
])
...
@@ -210,6 +236,10 @@ def ismount(path):
...
@@ -210,6 +236,10 @@ def ismount(path):
# or to impose a different order of visiting.
# or to impose a different order of visiting.
def
walk
(
top
,
func
,
arg
):
def
walk
(
top
,
func
,
arg
):
"""walk(top,func,args) calls func(arg, d, files) for each directory "d"
in the tree rooted at "top" (including "top" itself). "files" is a list
of all the files and subdirs in directory "d".
"""
try
:
try
:
names
=
os
.
listdir
(
top
)
names
=
os
.
listdir
(
top
)
except
os
.
error
:
except
os
.
error
:
...
@@ -233,6 +263,8 @@ def walk(top, func, arg):
...
@@ -233,6 +263,8 @@ def walk(top, func, arg):
# variable expansion.)
# variable expansion.)
def
expanduser
(
path
):
def
expanduser
(
path
):
"""Expand ~ and ~user constructions. If user or $HOME is unknown,
do nothing"""
if
path
[:
1
]
<>
'~'
:
if
path
[:
1
]
<>
'~'
:
return
path
return
path
i
,
n
=
1
,
len
(
path
)
i
,
n
=
1
,
len
(
path
)
...
@@ -266,6 +298,8 @@ def expanduser(path):
...
@@ -266,6 +298,8 @@ def expanduser(path):
varchars
=
string
.
letters
+
string
.
digits
+
'_-'
varchars
=
string
.
letters
+
string
.
digits
+
'_-'
def
expandvars
(
path
):
def
expandvars
(
path
):
"""Expand shell variables of form $var and ${var}. Unknown variables
are left unchanged"""
if
'$'
not
in
path
:
if
'$'
not
in
path
:
return
path
return
path
res
=
''
res
=
''
...
@@ -320,6 +354,7 @@ def expandvars(path):
...
@@ -320,6 +354,7 @@ def expandvars(path):
# but as this module is called "ntpath", that's obviously wrong!
# but as this module is called "ntpath", that's obviously wrong!
def
normpath
(
path
):
def
normpath
(
path
):
"""Normalize path, eliminating double slashes, etc."""
path
=
normcase
(
path
)
path
=
normcase
(
path
)
prefix
,
path
=
splitdrive
(
path
)
prefix
,
path
=
splitdrive
(
path
)
while
path
[:
1
]
==
os
.
sep
:
while
path
[:
1
]
==
os
.
sep
:
...
@@ -330,8 +365,7 @@ def normpath(path):
...
@@ -330,8 +365,7 @@ def normpath(path):
while
i
<
len
(
comps
):
while
i
<
len
(
comps
):
if
comps
[
i
]
==
'.'
:
if
comps
[
i
]
==
'.'
:
del
comps
[
i
]
del
comps
[
i
]
elif
comps
[
i
]
==
'..'
and
i
>
0
and
\
elif
comps
[
i
]
==
'..'
and
i
>
0
and
comps
[
i
-
1
]
not
in
(
''
,
'..'
):
comps
[
i
-
1
]
not
in
(
''
,
'..'
):
del
comps
[
i
-
1
:
i
+
1
]
del
comps
[
i
-
1
:
i
+
1
]
i
=
i
-
1
i
=
i
-
1
elif
comps
[
i
]
==
''
and
i
>
0
and
comps
[
i
-
1
]
<>
''
:
elif
comps
[
i
]
==
''
and
i
>
0
and
comps
[
i
-
1
]
<>
''
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment