当我使用os.path.abspath()获取文件绝对路径的时候,为什么总是得到像"workspace"+"filename"这样的路径?
import os
dir = "E:/Videos"
for f in os.listdir(dir):
print(os.path.abspath(f))
输出是:
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
==================== RESTART: E:/Workspace/Python/Test.py ====================
E:\Workspace\Python\13.gif
E:\Workspace\Python\b0020dgz88t.p401.1.mp4
E:\Workspace\Python\c0021dj07u4.p401.1.mp4
E:\Workspace\Python\n0021jtr5c6.p401.1.mp4
E:\Workspace\Python\o0019ba3fy0.p401.1.mp4
E:\Workspace\Python\x0021k863rf.p401.1.mp4
E:\Workspace\Python\z0015vpyqkv.p402.1.mp4
>>>
问题在于您对 os 的理解,
listdir()
工作方式是列出某路径下的全部文件名, 注意是文件名
,不是文件实体,这一点很重要,os.path.abspath()
的作用是对给定文件名前加上当前工作目录的绝对路径,至于你给定的文件名对应文件是否真的存在并不关心(因为你有可能是想要创建文件呢),os.listdir()
返回目录中每个文件的名称。这将给你:当您将这些传递给 os.path.abspath () 时, 它们被视为相对路径。这意味着它相对于您正在执行代码的目录。这就是为什么你要 "E:WorkspacePythonxxx.mp4 " 的原因。
象你问题中的情况, 只要将文件名与正在列出的目录路径联接起来就好:
os.path.abspath
只简单地删除.
和..
类似的东西, 并给出从当前目录的根目录到文件名 (或 symlink) 的路径提供完整路径. 如果你给出的是绝对路径(windows下以盘符开始,*nix下以/
开始)且没有.
或..
之类的, 则os.path.abspath
什么也不做.参考:
https://stackoverflow.com/a/2...