擅长:python、mysql、java
<p>它们不是等价的。你知道吗</p>
<p>区别在于如何处理以<code>os.sep</code>结尾的路径:</p>
<pre><code>>>> os.path.dirname('/foo/bar/')
'/foo/bar'
</code></pre>
<p>但是:</p>
<pre><code>>>> os.path.join('/foo/bar/', os.pardir)
'/foo/bar/..'
>>> os.path.abspath('/foo/bar/..')
'/foo'
</code></pre>
<hr/>
<p>那么你应该用哪一个呢?都不是。改用<a href="https://docs.python.org/3/library/pathlib.html" rel="nofollow noreferrer">pathlib module</a>:</p>
<pre><code>>>> from pathlib import Path
>>> Path('/foo/bar/').parent
PosixPath('/foo')
>>> str(Path('/foo/bar/').parent)
'/foo'
</code></pre>
<p>如果您绝对不能使用pathlib,请使用<code>os.path.dirname</code>。想要在文件路径中有pardir段(<code>..</code>)的情况非常罕见,它们比任何其他情况都更容易引起问题。你知道吗</p>