解决文件路径的问题的总结

构建路径:
    os.path 模块用来管理文件路径问题,它中包含了很多用以构建路径的函数,其中最常用的便是 join,abspath 以及 expanduser 函数:

  • join:拼接路径(不同的操作系统使用不同的分隔符拼接);

  • abspath:得到绝对路径;

  • expanduser:展开用户的 home 目录。

具体的操作实例如下所示:

>>> import os
>>> os.getcwd()
'/root/rocky0429'
>>> os.listdir()
['test.py', 'c.py', 'b.txt', 'a.txt']
>>> os.path.join('~','rocky0429','a.txt')
'~/rocky0429/a.txt'
>>> os.path.abspath('.')
'/root/rocky0429'
>>> os.path.abspath('..')
'/root'
>>> os.path.abspath('../rocky0429/b.txt')
'/root/rocky0429/b.txt'
>>> os.path.expanduser('~')
'/root'
>>> os.path.expanduser('~/rocky0429')
'/root/rocky0429'
>>> os.path.expanduser('~/rocky0429/c.py')
'/root/rocky0429/c.py'

上述代码中的 os.path 模块中的 abspath 函数用来返回一个相对路径的绝对路径,那么相应的,也会存在一个函数 isabs 来检查某路径是否为绝对路径:

>>> os.path.isabs('/root/rocky0429/test.py')
True
>>> os.path.isabs('~')
False

当然在写代码的时候,有时候需要导入当前源文件所在目录下的其他包,这个时候就需要获取当前源文件的父目录,那么如何获取呢?我们可以用 __file__ 这个变量来表示,具体操作如下所示:

# coding:utf-8
import ossource_file_path = os.path.abspath(__file__)print('Current working directory : {}'.format(os.getcwd()))
print('Source file address : {}'.format(source_file_path))

输入的结果如下所示:

Current working directory : /root/rocky0429
Source file address : /root/rocky0429/test.py

拆分路径

 

我们使用 Python 可以很方便的构建文件路径,当然也可以很舒服的对文件路径进行拆分,os.path 模块在拆分路径中常用的是 split/splitext,dirname 以及 basename 函数:

 

  • split:返回一个二元组,包括文件的路径和文件名;

  • splitext:也是返回一个二元组,包括扩展名和去除扩展名的部分;

  • dirname:返回文件所在路径;

  • basename:返回文件名。

 

具体的操作实例如下所示:

>>> import os
>>> source_file_path = '/root/rocky0429/test.py'
>>> os.path.split(source_file_path)
('/root/rocky0429', 'test.py')
>>> os.path.splitext(source_file_path)
('/root/rocky0429/test', '.py')
>>> os.path.dirname(source_file_path)
'/root/rocky0429'
>>> os.path.basename(source_file_path)
'test.py'

判断路径是否存在

 

os.path 模块也提供了一些函数来判断某条路径是否存在,还能判断处在这个条路径的文件的类型,常用的便是 exists,isfile 以及 isdir 函数(is 开头是判断类函数,返回布尔类型结果):

 

  • exists:判断某条路径是否存在;

  • isfile:判断路径是否存在且为一个文件;

  • isdir:判断路径是否存在且为一个文件夹。

 看到这里你可能觉得上面说的都很简单,可恰恰是简单的东西叠加组合就能“变出”很多你想要的结果,如何去使用这里面有大学问。对于 os.path 模块里的函数,如果我们可以充分利用,也能够实现很多有用的功能,下面来看几个例子:

1.获取 /root/rocky0429 目录下的所有文件

>>> import os
>>> [file for file in os.listdir(os.path.expanduser('~/rocky0429')) if os.path.isfile(file)]
['test.py', 'c.py', 'b.txt', 'a.txt']

2.获取 /root/rocky0429 目录下的所以列表

>>> import os
>>> [table for table in os.listdir(os.path.expanduser('~/rocky0429')) if os.path.isdir(table)]
['data', 'leey']

3.获取 /root/rocky0429 目录下所有目录的绝对地址

>>> import os
>>> {table: os.path.realpath(table) for table in os.listdir(os.path.expanduser('~/rocky0429')) if os.path.isdir(table)}
{'data': '/root/rocky0429/data', 'leey': '/root/rocky0429/leey'}

 

转载于:https://www.cnblogs.com/key01/p/10185713.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进程间的数据共享

////TITLE:// 进程间的数据共享//AUTHOR:// norains//DATE:// Friday 20-June-2008//Environment:// WINCE5.0 VS2005 MIPS SDK// 同一进程的不同线程间共享数据不是难事,并且方式也很多,不胜枚举;而不同的进程间需要共享数据…

Silverlight实用窍门系列:63.Silverlight中的Command,自定义简单Command

在Silverlight中的MVVM模式下将前台页面和ViewModel界面交互分离开是通过本节所要讲述的Command实现的。我们自定义一个Command需要继承于ICommand接口并且实现这个接口。它有CanExecute()、Execute()方法和CanExecuteChanged事件组成。 CanExecute():判断是否继续执…

赋值运算符和拷贝构造函数的区别与联系

转载:http://blog.csdn.net/hebbely/article/details/65437510 简述: C中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法。拷贝构造函数使用已有的对象创建一个新的对象,赋值运…

硬件有没有35岁危机?

大家好,我篇文章是我的朋友记得诚写的,分享给大家!35岁危机指的是,很多企业停止招聘35岁及以上的员工,甚至会裁掉年纪大的人。我们经常说程序员,说互联网从业者有35岁危机。这个危机一方面是自己的焦虑&…

深入理解ES6之迭代器与生成器

迭代器 迭代器 iterator,在 Javascript 中,迭代器是一个对象(也可称作为迭代器对象),它提供了一个 next() 方法,用来返回迭代序列中的下一项。 next 方法的定义,next 方法是一个函数&#xff0c…

强大的独立日期选择器(date picker)插件 - Kalendae

日期:2012-4-16 来源:GBin1.com 在线演示 本地下载 今天分享一个独立的日期选择插件Kalendae,Kalendae是 一个强大健壮的独立日期选择器。如果你不想使用重量的jQuery UI类库的话,这个插件肯定是一个不错的备选。Kalendae包含了…

35家名企嵌入式/软件秋招岗位等你来!

大家好,我是写代码的篮球球痴。前两天一个小伙伴在微信让我帮忙推荐嵌入式招聘岗位。我实话实说,是有认识的人让我推荐简历的,但是相对于专业的招聘网站,我手里能拿出来的岗位实在是少之又少,专业的招聘网站会对不同的…

javascript实现平滑的锚点

转到源文件 转载于:https://www.cnblogs.com/flat_peach/archive/2008/07/22/1248653.html

Windows下窗口的生命周期

程序的执行 当执行Windows程序的时候,加载器加载该程序,然后调用C startup code,再调用程序中WinMain()。 初始化 WinMain函数首先通过CreateWindow函数创建窗口,并对窗口进行初始化配置; 消息的处理 程序通过循环GetMessage函数不…

尝试梳理下ARM处理器的发展历史

大家好,这篇文章是我的朋友Michael Yao写的,我觉得非常不错,分享给大家。1. 前言本文尝试简单梳理下ARM处理器的发展历史、架构的演进,包括不同处理器的应用方向,但我们重点还是围绕Cortex-A系列展开,也会介…

linux下的CPU、内存、IO、网络的压力测试

一、对CPU进行简单测试: 1、通过bc命令计算特别函数 例:计算圆周率 echo "scale5000; 4*a(1)" | bc -l -q MATH LIBRARY If bc is invoked with the -l option, a math library is preloaded and the default scale is set to 20.…

清空sql server日志

1、打开查询分析器,输入命令DUMP TRANSACTION 数据库名 WITH NO_LOG2、打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至: ,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了。3、在数…

find与grep的区别

find 功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。 语法: find 查找位置 匹配文件名 说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻…

给你这张图,你能搜索到来历吗

如果我们想让搜索引擎帮我们找到这张图的来历,可能吗? 这是目前搜索引擎做不到的。如果能做到呢? 转载于:https://www.cnblogs.com/shangge/archive/2008/07/23/1249767.html

晚上读内核代码

最近因为要解决一个bug,需要在内核的f_hid.c里面做一些适配,需要把这部分代码研究透彻。在这几天之前我是根本不知道什么是In端点,Out端点,以及什么是endpoint 0的,而且最近的一段时间,我一直是在写应用方面…

我的家庭私有云计划-16

嗯,上午测试S2S的稳定性,改掉几个bug。还挺忙的。这会儿让机器跑测试去,腾出点时间,我们接着聊。 呵呵,昨天哪,已经有朋友批评我了,说我有点贪大求全,这个论坛什么的没必要自己实现&…

采用存储复制方式同步数据,实现数据库安全升级

2017年年初,海天起点为某省中行机房搬迁工作保驾护航。在机房搬迁过程中发现有多套数据库需要升级到11g,但由于有些数据库比较老旧,升级过程不能一次性完成,需要先升级到一个中间版本,再升级到最终目标版本。 但由于银…

【转】娱乐八卦——关于孙悟空的授业师傅的分析

一.《西游记》和《封神演义》联系密切  提起明朝著作《西游记》和《封神演义》,我想你一定不会陌生。从两部作品中派生出来的《孙悟空大闹天宫》、《哪吒闹海》等神话就更是家喻户晓,人人皆知了。两部小说虽然讲述的是不同朝代的故事&#…

为啥要xargs

转载:http://blog.csdn.net/yhcharles/article/details/44875865 为啥要xargs? 通常linux命令可以用|首尾相连,上一个命令的 stdout 连接到下一个命令的 stdin。但是有些命令,比如ls、rm等,是从命令行参数接受输入的。这时候如果…

Linux进程调度与性能优化 | 真货

作者简介:张毅峰,某主机厂架构师。一、eBPF安全可观测性的前景展望本次分享将从监控和可观测性、eBPF安全可观测性分析、内核安全可观测性展望三个方面展开。1.监控(Monitoring)vs可观测性(Observability)从上图可以看到,监控只是可观测性的冰…