课时30:文件系统:介绍一个高大上的东西
目录:
一、os模块中关于文件/目录常用的函数使用方法
二、os.path模块中关于路径常用的函数使用方法
三、课时30课后习题及答案
接下来会介绍跟Python的文件相关的一些很有用的模块。模块是什么?其实我们写的每一个源代码文件(*.py)都是一个模块。Python自身带有非常多使用的模块。
比如刚开始介绍的文字小游戏,里边就用random模块的randint()函数来生成随机数。然而要使用这个randint()函数,直接就调用可不行:
>>> random.randint(0,9)Traceback (most recent call last):File "<pyshell#36>", line 1, in <module>random.randint(0,9) NameError: name 'random' is not defined
正确的做法是先使用import语句导入模块,然后再使用:
>>> import random>>> random.randint(0,9)3 >>> random.randint(0,9)0 >>> random.randint(0,9)7
*******************************************************
一、os模块中关于文件/目录常用的函数使用方法
*******************************************************
首先要介绍的是高大上的OS模块,OS即Operating System的缩写,意思是操作系统。之所以说OS模块高大上,是因为对于文件系统的访问,Python一般是通过OS模块来实现的。
Python是跨平台的语言,也就是说,同样的源代码在不同的操作系统不需要修改就可以同样实现。有了OS模块,不需要关心什么操作系统下使用什么模块,OS模块会帮你选择正确的模块并调用。
下表列举了os模块中关于文件/目录常用的函数使用方法:
函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path='.') 列举指定目录中的文件名('.'表示当前目录,'..'表示上一级目录) mkdir(path) 创建单层目录,如该目录已存在抛出异常 makedirs(path) 递归创建多层目录,如该目录已存在抛出异常,注意:'E:\\a\\b'和'E:\\a\\c'并不会冲突 remove(path) 删除文件 rmdir(path) 删除单层目录,如该目录非空则抛出异常 removedirs(path) 递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常 rename(old, new) 将文件old重命名为new system(command) 运行系统的shell命令 walk(top) 遍历top路径以下所有的子目录,返回一个三元组:(路径, [包含目录], [包含文件])【具体实现方案请看:第30讲课后作业^_^】 以下是支持路径操作中常用到的一些定义,支持所有平台 os.curdir 指代当前目录('.') os.pardir 指代上一级目录('..') os.sep 输出操作系统特定的路径分隔符(Win下为'\\',Linux下为'/') os.linesep 当前平台使用的行终止符(Win下为'\r\n',Linux下为'\n') os.name 指代当前使用的操作系统(包括:'posix', 'nt', 'mac', 'os2', 'ce', 'java')
1、getcwd()
在有些情况下,我们需要获得应用程序当前的工作目录(比如要保存临时文件),那么可以使用getcwd()函数获得:
>>> import os>>> os.getcwd()'C:\\Users\\14158\\AppData\\Local\\Programs\\Python\\Python37'
2、chdir(path)
用chdir()函数可以改变当前工作目录,比如可以切换到D盘:
>>> os.chdir("D:\\")>>> os.getcwd()'D:\\'
3、listdir(path='.')
有时候你可能需要知道当前目录下有哪些文件和子目录,那么listdir()函数可以帮你列举出来。path参数用于指定列举的目录,默认值是'.',代表根目录,也可以使用'..'代表上一层目录:
>>> os.chdir("C:\\")>>> os.listdir()['$Recycle.Bin', 'aow_drv.log', 'AppData', 'Documents and Settings', 'hiberfil.sys', 'Intel', 'OneDriveTemp', 'pagefile.sys', 'pbb.txt', 'PerfLogs', 'Program Files', 'Program Files (x86)', 'ProgramData', 'Recovery', 'swapfile.sys', 'System Volume Information', 'Users', 'Windows'] >>> os.listdir("D:\\")['$RECYCLE.BIN', 'bigdata', 'Hlddz', 'InstallConfig.ini', 'JAVA', 'QQ图片20180728154834.jpg', 'QQ图片20180728155014.jpg', 'qycache', 'rhel-server-7.4-x86_64-dvd.iso', 'System Volume Information', 'ubuntu-18.04-live-server-amd64.iso', '大二上', '安装包', '小甲鱼', '应用程序', '桌面壁纸']
4、mkdir(path)
mkdir()函数用于创建文件夹,如果该文件夹存在,则抛出FileExistsError异常:
>>> os.mkdir("test")>>> os.listdir()['$Recycle.Bin', 'aow_drv.log', 'AppData', 'Documents and Settings', 'hiberfil.sys', 'Intel', 'OneDriveTemp', 'pagefile.sys', 'pbb.txt', 'PerfLogs', 'Program Files', 'Program Files (x86)', 'ProgramData', 'Recovery', 'swapfile.sys', 'System Volume Information', 'test', 'Users', 'Windows'] >>> os.mkdir("test")Traceback (most recent call last):File "<pyshell#57>", line 1, in <module>os.mkdir("test") FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'test'
5、makedirs(path)
makedirs()函数可以用于创建多层目录:
>>> os.makedirs(r".\a\b\c")
效果如图所示:
6、remove(path)、rmdir(path) 和removedirs(path)
remove()函数用于删除指定的文件,注意是删除文件,不是删除目录。如果要删除目录,则用rmdir()函数;如果要删除多层目录,则用removedirs()函数。
>>> os.listdir() ['$Recycle.Bin', 'a', 'aow_drv.log', 'AppData', 'b', 'Documents and Settings', 'hiberfil.sys', 'Intel', 'OneDriveTemp', 'pagefile.sys', 'pbb.txt', 'PerfLogs', 'Program Files', 'Program Files (x86)', 'ProgramData', 'Recovery', 'swapfile.sys', 'System Volume Information', 'test', 'Users', 'Windows'] >>> os.remove("test") >>> os.rmdir("b") >>> os.removedirs(r".\a\b\c")
注:在C盘有可能会报错,没有权限。
7、rename(old,new)
rename()函数用于重命名文件或文件夹:
>>> os.listdir() ['a','a.txt'] >>> os.rename("a","b") >>> os.rename("a.txt","b.txt") >>> os.listdir()['b','b.txt']
8、systemf(command)
几乎每个操作系统都会提供一些小工具,system()函数就是用于使用这些小工具:
>>> os.system("calc")#calc是windows自带的计算器
回车后即弹出计算器。
9、walk(top)
最后是walk()函数,这个函数在有些时候确实非常有用,可以省去你很多麻烦。该函数的作用是遍历top参数指定路径下的所有子目录,并将结果返回一个三元组(路径,[包含目录],[包含文件])。
>>> for i in os.walk("test"):print(i)
另外path模块还提供了一些很实用的定义,分别是:os.curdir表示当前目录;os.pardir表示上一级目录('..');os.sep表示路径的分隔符,比如Windows系统下为‘\\’,linux下为‘\’;os.linesep表示当前平台使用的行终止符(在Windows下为‘\r\n’,Linux下为‘\n’);os.name表示当前使用的操作系统。
*******************************************************
二、os.path模块中关于路径常用的函数使用方法
*******************************************************
另一个强大的板块是os.pash,它可以完成一些针对路径名的操作。下表列举了os.pash中常用到的函数使用方法。
函数名 使用方法 basename(path) 去掉目录路径,单独返回文件名 dirname(path) 去掉文件名,单独返回目录路径 join(path1[, path2[, ...]]) 将path1, path2各部分组合成一个路径名 split(path) 分割文件名与路径,返回(f_path, f_name)元组。如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在 splitext(path) 分离文件名与扩展名,返回(f_name, f_extension)元组 getsize(file) 返回指定文件的尺寸,单位是字节 getatime(file) 返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) getctime(file) 返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) getmtime(file) 返回指定文件最新的修改时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) 以下为函数返回 True 或 False exists(path) 判断指定路径(目录或文件)是否存在 isabs(path) 判断指定路径是否为绝对路径 isdir(path) 判断指定路径是否存在且是一个目录 isfile(path) 判断指定路径是否存在且是一个文件 islink(path) 判断指定路径是否存在且是一个符号链接 ismount(path) 判断指定路径是否存在且是一个挂载点 samefile(path1, paht2) 判断path1和path2两个路径是否指向同一个文件
1、basename(pash)和dirname(path)
basename(pash)和dirname(path)函数分别用于获取文件名和路径名:
>>> os.path.dirname(r"a\b\test.txt")'a\\b' >>> os.path.basename(r"a\b\test.txt")'test.txt'
2、join(path1[, path2[, ...]])
join()函数跟BIF的那个join()函数不同,os.path.join()用于将路径名和文件名组合成一个完整的路径:
>>> os.path.join(r"C:\Python34\Test","FishC.txt")'C:\\Python34\\Test\\FishC.txt'
3、split(path)和splitext(path)
split()和splitext()函数都用于分割路径,split()函数分割路径和文件名(如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在);splitext()函数则是用于分割文件名和扩展名:
>>> os.path.split(r"a\b\test.txt")('a\\b', 'test.txt') >>> os.path.splitext(r"a\b\test.txt")('a\\b\\test', '.txt')
4、getsize(file)
getsize()函数用于获取文件的尺寸,返回值是以字节为单位:
>>> os.chdir("C:\\Users\\14158\\AppData\\Local\\Programs\\Python\\Python37")>>> os.path.getsize("python.exe")99992
5、getatime(file)、getctime(file)和getmtime(file)
getatime(file)、getctime(file)和getmtime(file)分别用于获取文件的最近访问时间、创建时间和修改时间。不过返回值是浮点型秒数,可用time模块的gmtime()或localtime()函数换算:
>>> import time>>> temp = time.localtime(os.path.getatime("python.exe"))>>> print("python.exe被访问的时间是:",time.strftime("%d%b%Y%H:%M:%S",temp))python.exe被访问的时间是: 20Aug201817:46:49 >>> temp = time.localtime(os.path.getctime("python.exe"))>>> print("python.exe被创建的时间是:",time.strftime("%d%b%Y%H:%M:%S",temp))python.exe被创建的时间是: 27Jun201805:01:38 >>> temp = time.localtime(os.path.getmtime("python.exe"))>>> print("python.exe被修改的时间是:",time.strftime("%d%b%Y%H:%M:%S",temp))python.exe被修改的时间是: 27Jun201805:01:38
还有一些函数返回布尔类型的值,详情见表。
*******************************
三、课时30课后习题及答案
*******************************
转载于:https://www.cnblogs.com/DC0307/p/9507265.html
课时30:文件系统:介绍一个高大上的东西相关推荐
- python小课文件_[Python]小甲鱼Python视频第030课(文件系统:介绍一个高大上的东西)课后题及参考解答...
# -*- coding: utf-8 -*- """ Created on Fri Mar 8 15:49:32 2019 @author: Administrator ...
- 介绍一个可以把东西传到LINUX下的FTP客户端
如果装了linux,但又不想装什么vsftp之类的话,又要把东西用ftp传给linux的话,那要如何搞呢, 一个很好的软件,叫filezilla,开源的哦,可以跑在windows下,可以直接通过22端 ...
- 如何设计一个“高大上”的 logo
前不久,我们老大写的一篇博客< Coding,做一个有情怀的产品 >中有提到设计 Coding logo 的大致由来,今天我就设计 Coding 猴头的过程具体说说如何设计一个 logo. ...
- 模拟linux终端测试java,介绍一个在线的Linux,没有安装Linux或者虚拟机不喜欢用的童鞋可以简单的用这个jslinux测试各种命令...
介绍一个在线的Linux,没有安装Linux或者虚拟机不喜欢用的童鞋可以简单的用这个jslinux测试各种命令 这个是不错的选择,注意IE浏览器不能使用,用的话换成Chrome或者FireFox浏览器 ...
- 日程定时提醒程序C语言,DIY一个高大上带提醒的计时器,简单实用,你还在等什么...
DIY一个高大上带提醒的计时器,简单实用,你还在等什么 发布时间:2020-07-19 15:02:29 来源:51CTO 阅读:1124 作者:实验楼 小编心语:锵锵锵!小编我又来了!昨天发了一篇比 ...
- 介绍一个监控网卡及网络流量的好工具NICSTAT
介绍一个监控网卡及网络流量的好工具NICSTAT 最近发现了个好的工具,是监控网卡及网络流量的叫NICSTAT,这里我通过这个例子来说明 当你发现一个陌生的东西,怎样一下子弄熟,概括来讲分为安装,应用 ...
- AIGC周报|30秒定制一个文生图模型;60美元让AI玩转《我的世界》;手机版“文生图”模型:2秒不到出一张图
AIGC(AI Generated Content)即人工智能生成内容.近期爆火的 AI 聊天机器人 ChatGPT,以及 Dall·E 2.Stable Diffusion 等文生图模型,都属于 A ...
- 如何通过牛顿方法解决Logistic回归问题 By 机器之心2017年8月09日 16:30 本文介绍了牛顿方法(Newton's Method),以及如何用它来解决 logistic 回归。log
如何通过牛顿方法解决Logistic回归问题 By 机器之心2017年8月09日 16:30 本文介绍了牛顿方法(Newton's Method),以及如何用它来解决 logistic 回归.logi ...
- 泰亚史诗萨拉斯服务器维护,泰亚史诗上古馈赠介绍 这个可是好东西
原标题:泰亚史诗上古馈赠介绍 这个可是好东西 上个星期四,<泰亚史诗>2019新年活动开始了. 于是上周六,萨拉斯的冒险者们迫不及待召集了小伙伴组成小队,打倒了第一只巨人,拿到了掉落的收益 ...
最新文章
- MRI原理谁都看得懂版
- 算法导论Java实现-随机化数组的两种方式(5.3章节)
- 给开源编译器插入后门
- OpenDataSource,sql开放式数据源
- 实验二 网络嗅探与欺骗
- 期末项目设计图-教务管理系统
- MATLAB2016打开mat格式图片
- CCF NOI1065 最小公倍数
- 计算机软件著作权登记指南
- 黑马vue实战项目-(八)项目的上线
- Flex在线拍照功能
- Mysql8.0修改数据库密码
- ★如何解释特修斯之船问题? /编
- 关于知识图谱标准化构建平台的思考:知识图谱只能做项目,不能做平台?
- 树莓派配套系统_3.95寸配套树莓派显示屏,移植好操作系统,普及树莓派显示屏...
- 邮件传输的过程都看不懂。那我走(狗头)
- python使用RSA加密算法
- 关于DIY eGPU的使用配置心得
- 【哈夫曼树】介绍与应用
- 前端MUI+H5+HBuilderX开发APP(IOS,android),后台Springboot,java学习与实践文章,更新中(二)