前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python——关于path的坑

Python——关于path的坑

作者头像
Ed_Frey
发布2019-07-04 15:21:16
9640
发布2019-07-04 15:21:16
举报
文章被收录于专栏:奔跑的键盘侠奔跑的键盘侠
这是奔跑的键盘侠的第103篇文章

学习语言,基本都会碰到关于路径拼接的语法,对于业余选手来讲,可能会比较困惑,包括我在内,直到某一天才顿悟…… 雷爆了。。

毕竟对于入门小白来讲,通常一个.py文件就解决了自己想要的功能,但是随着慢慢的深入,一个.py满足不了需求时,比如涉及多个文件互相引用,这也没什么。但是当要将代码迁移到其他电脑使用时,发现之前用的绝对路径要一个个从头改到尾,千万只草泥马奔驰而过…… 对,就是这个感觉,毫不夸张。

先来科普一下,什么是绝对路径,就是主页文件或者目录在硬盘上真正的路径,也就是完整的存盘路径。举个例子:比如C:\document\edfrey\desktop\,这个路径是我电脑真实存在的路径,文件夹中直接输入就可以直接打开的。如果我把代码部署在我自己电脑这个文件夹中(而代码中使用到的路径全部都是一个个字母敲出来的真实路径),现在要迁移到其他人电脑中,而新电脑中没有这个路径,那你的代码废了。。要么新建一个完全一样的路径,要么代码中的路径从头改一圈。

再举个常见的例子,我们在安装一些程序的时候,会弹出一个窗口:让你选择这个程序要安装在哪个盘哪个文件夹下,通常默认是C盘下新建一个文件夹。这就是一个安装程序的目录,安装完,你会发现这个目录下有很多子文件夹和子程序。那这些程序是如何找到这个目录、安装在该目录里面的呢?这就用到了相对路径,以及路径拼接。

1

path

python有一个内置的os模块,使用help(os.path)命令,print一下就可以获取关于路径的语法介绍,篇幅较长这里就不贴出来了,感兴趣的童鞋可以自行查阅。下面贴一下常用的几个命令:

代码语言:javascript
复制
#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
# @Time    : 2019-06-02 10:48
# @Author  : Ed Frey
# @File    : path_modules_packages.py
# @Software: PyCharm
import os
import sys

path = "C:/document/test"
path2 = os.path.join(path,"defrey","zoe.txt")
print("os.path.join   %s" %path2)
print(os.path.dirname(path))
print(os.path.split(path2))
print(os.path.splitext(path2))
print("os.path.abspath   %s"% os.path.abspath(path2))
print("os.path.basename   %s"% os.path.basename(path2))
print("os.sep   %s"% os.sep)

输出结果如下:

/Users/Ed_Frey/anaconda2/envs/python36/bin/python3.6 /Users/Ed_Frey/Desktop/python_study/1-20chapter_note/pycharm_wechat_study_share/path_modules_packages/path_modules_packages.py

os.path.join C:/document/test/defrey/zoe.txt

C:/document

('C:/document/test/defrey', 'zoe.txt')

('C:/document/test/defrey/zoe', '.txt')

os.path.abspath /Users/Ed_Frey/Desktop/python_study/1-20chapter_note/pycharm_wechat_study_share/path_modules_packages/C:/document/test/defrey/zoe.txt

os.path.basename zoe.txt

os.sep /

Process finished with exit code 0

join就是路径拼接,前一级目录+参数,参数可以多个,文件夹在前,文件名在后,当然也可以没有文件名,想怎么拼就怎么拼。当然,不同的电脑系统,对应不同的拼接符号,join命令会自己get对应的电脑系统的拼接符(斜杠或者反斜杠)。

dirname就是获取当前文件的上级目录

split是分切路径为两部分,第一部分是上级路径,第二部分是末级文件。

splitext也是分切,不过是切出文件的扩展名。

abspath,是获取绝对路径

basename 看结果就一目了然,就是获取末级文件名

最后补充的os.sep也是一个可能会用到的命令,就是获取路径的分隔符(斜杠或者反斜杠,不同电脑系统是不一样的)

2

具体用法提示

当设计复杂一点的功能时,只使用一个类似path = "C:/***/***"的路径,然后使用os模块中的语法新建目录、拼接路径等,当要迁移代码到其他设备时,只须改动一下path一个参数即可。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奔跑的键盘侠 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档