Misunderstanding of python os.path.abspath
我有以下代码:
1 2 3 | directory = r'D:\images' for file in os.listdir(directory): print(os.path.abspath(file)) |
我想要下一个输出:
- D:图像img1.jpg
- D:imagesimg2.jpg等
但我得到了不同的结果:
- D:代码img1.jpg
- D:代码img2.jpg
其中d:code是我当前的工作目录,结果与
1 | os.path.normpath(os.path.join(os.getcwd(), file)) |
所以,问题是:os.path.abspath的目的是什么,而我必须使用
1 | os.path.normpath(os.path.join(directory, file)) |
要得到我文件的真正绝对路径吗?如果可能,显示真实的用例。
问题在于你对
1 2 3 | img1.jpg img2.jpg ... |
当你把它们传递给
相反,您要做的是将文件名与所列出的目录路径连接起来。
1 | os.path.abspath(os.path.join(directory, file)) |
1 2 3 | os.chdir(directory) for f in os.listdir('.'): print(os.path.abspath(f)) |
python的本地
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import os def better_listdir(dirpath): """ Generator yielding (filename, filepath) tuples for every file in the given directory path. """ # First clean up dirpath to absolutize relative paths and # symbolic path names (e.g. `.`, `..`, and `~`) dirpath = os.path.abspath(os.path.expanduser(dirpath)) # List out (filename, filepath) tuples for filename in os.listdir(dirpath): yield (filename, os.path.join(dirpath, filename)) if __name__ == '__main__': for fname, fpath in better_listdir('~'): print fname, '->', fpath |
或者,也可以使用"更高级别"的路径模块,例如py.path、path.py和pathlib(现在是python的标准部分,用于3.4及以上版本,但可用于2.7 forward)。这些增加了项目的依赖性,但提高了文件、文件名和文件路径处理的许多方面。