欢迎来到“只读课堂”!

这个模块和文件操作一样,使用它,可以与我们当前的系统进行交互。

OS模块简单介绍

os模块主要有以下几种:posix(适用于unix操作系统) nt(win) mac(旧版本的MACOS),dos(DOS)

使用os模块的过程中,不需要考虑平台差异,python解释器就会帮大家选择正确的系统支持

window系统下是nt

In [1]:

#但是你不需要考虑,你到底要选择哪个操作系统和代码,python会帮你选好你需要的操作环境,你只需要打代码就行了。

os对进程和进程运行环境进行管理,os模块还可以处理大部分文件系统操作:比如说,删除、重命名文件、遍历目录树,以及管理文件访问权限。

In [2]:

#之前是打开文件操作,但是现在os模块是在文件外进行操作。

os和sys的区别:

os负责程序与操作系统的交互,sys负责程序与python解释器的交互

os.path和sys.path:

sys.path是咱们常用的PATH环境变量,而os.path是一个模块,提供一些方法函数

常用OS模块函数(一)

os.name:输入正在使用的平台

os.getcwd():函数得到当前工作目录,即当前Python脚本工作的目录路径

运行目录:执行程序的路径

工作目录:程序运行时,程序中我们要操作的一系列相对路径(需要参照),以运行时目录为参照。并且可在程序运行时更改

os.listdir():返回指定目录下的所有文件和目录名的一个列表,但是并没有列出来什么是目录,什么是文件

os.remove('flie_name'):删除指定文件

os.rmdir('dir_name'):删除指定目录

先导入os模块

In [4]:

import os

In [5]:

os.name

Out[5]:

'nt'

In [6]:

#它会返回一些字母,也就是我们前面提到的操作系统的代号。

工作路径

In [9]:

os.getcwd()

Out[9]:

'C:\\Users\\Jimmy'

运行目录

In [11]:

#工作路径是可以改变的

In [16]:

#如果这里不给出目录的话,它会默认使用工作目录,也就会返回当前工作目录里的所有文件。

In [17]:

#如果我们想要实现一个小功能

In [21]:

#假如说我们要显示某个目录下的所有目录下的所有文件和所有文件夹

os.listdir()

In [22]:

os.listdir()

Out[22]:

['.ipynb_checkpoints','.ipython','.jupyter','.pylint.d','.vscode','3D Objects','AppCan settings','AppData','Application Data','Contacts','Cookies','Desktop','Documents','Downloads','Favorites','Intel','Links','Local Settings','MicrosoftEdgeBackups','Music','My Documents','NetHood','NTUSER.DAT','ntuser.dat.LOG1','ntuser.dat.LOG2','NTUSER.DAT{47a6a17a-a514-11e7-a94e-ec0d9a05c860}.TM.blf','NTUSER.DAT{47a6a17a-a514-11e7-a94e-ec0d9a05c860}.TMContainer00000000000000000001.regtrans-ms','NTUSER.DAT{47a6a17a-a514-11e7-a94e-ec0d9a05c860}.TMContainer00000000000000000002.regtrans-ms','ntuser.ini','OneDrive','Pictures','PrintHood','Python入门第24课——递归(只读课堂).ipynb','Python初级第2课——os模块(只读课堂).ipynb','Recent','Saved Games','Searches','SendTo','Templates','Untitled.ipynb','Videos','「开始」菜单']

In [23]:

#我们可以随便给它来一个参数

In [24]:

#比如说桌面

In [27]:

os.listdir('C:\\Users\\Jimmy\\Desktop')

Out[27]:

['Acrobat Pro9.lnk','Anaconda Navigator.lnk','desktop.ini','E听说.lnk','Google Chrome.lnk',"Jeason's Files.lnk",'Jupyter Notebook.lnk','QQ影音.lnk','Visual Studio Code.lnk','迅雷.lnk','金山词霸2016.lnk']

In [29]:

#注意啊,一定要用双斜杠或者在前面加一个r,从而防止特定字母。

In [30]:

#但是这个功能只能反映桌面下的浅浅的一个目录,文件夹之类的都没展开,所以说这个功能还是比较low的。

删除指定文件

In [35]:

#先新建一个文件

In [36]:

os.listdir('C:\\Users\\Jimmy\\Desktop')

Out[36]:

['Acrobat Pro9.lnk','Anaconda Navigator.lnk','desktop.ini','E听说.lnk','Google Chrome.lnk',"Jeason's Files.lnk",'Jupyter Notebook.lnk','QQ影音.lnk','Visual Studio Code.lnk','新建文件夹','迅雷.lnk','金山词霸2016.lnk']

In [37]:

#这里多了一个文件夹,可以拿来删除了

In [38]:

os.rmdir('新建文件夹')
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-38-814e3d4efbb6> in <module>()
----> 1 os.rmdir('新建文件夹')FileNotFoundError: [WinError 2] 系统找不到指定的文件。: '新建文件夹'

In [39]:

#这样系统又会默认到工作目录下面去,所以报错说没有这个目录,

In [40]:

#这样说来我们就要把目录给全,并且转义。

In [41]:

os.rmdir(r'C:\Users\Jimmy\Desktop\新建文件夹')

In [42]:

#这样就能删除了

In [43]:

#再看看确保删除:

In [45]:

os.listdir('C:\\Users\\Jimmy\\Desktop')

Out[45]:

['Acrobat Pro9.lnk','Anaconda Navigator.lnk','desktop.ini','E听说.lnk','Google Chrome.lnk',"Jeason's Files.lnk",'Jupyter Notebook.lnk','QQ影音.lnk','Visual Studio Code.lnk','迅雷.lnk','金山词霸2016.lnk']

In [46]:

#是不是没有了啊

对应关系

In [48]:

#如果我们不想用绝对路径,而就想要删除那个文件夹,那怎么办?(绝对路径

In [50]:

os.rmdir(r'.\Desktop\新建文件夹')

In [51]:

#是不是只用这样简写就行了?只是说要记得在\Desktop前面加个“.”

In [52]:

os.listdir('C:\\Users\\Jimmy\\Desktop')

Out[52]:

['Acrobat Pro9.lnk','Anaconda Navigator.lnk','desktop.ini','E听说.lnk','Google Chrome.lnk',"Jeason's Files.lnk",'Jupyter Notebook.lnk','QQ影音.lnk','Visual Studio Code.lnk','迅雷.lnk','金山词霸2016.lnk']

In [53]:

#就没有了

常用OS模块函数(二)

os.mkdor('dir_name'):创建目录

os.makedirs('a/b/c'):递归创建目录

os.system('ls'):执行shell命令

os.chdir('file_path'):改变工作目录

os.chmod('file_name'):改变文件或目录的权限

In [54]:

dir(os)

Out[54]:

['DirEntry','F_OK','MutableMapping','O_APPEND','O_BINARY','O_CREAT','O_EXCL','O_NOINHERIT','O_RANDOM','O_RDONLY','O_RDWR','O_SEQUENTIAL','O_SHORT_LIVED','O_TEMPORARY','O_TEXT','O_TRUNC','O_WRONLY','P_DETACH','P_NOWAIT','P_NOWAITO','P_OVERLAY','P_WAIT','PathLike','R_OK','SEEK_CUR','SEEK_END','SEEK_SET','TMP_MAX','W_OK','X_OK','_Environ','__all__','__builtins__','__cached__','__doc__','__file__','__loader__','__name__','__package__','__spec__','_execvpe','_exists','_exit','_fspath','_get_exports_list','_putenv','_unsetenv','_wrap_close','abc','abort','access','altsep','chdir','chmod','close','closerange','cpu_count','curdir','defpath','device_encoding','devnull','dup','dup2','environ','errno','error','execl','execle','execlp','execlpe','execv','execve','execvp','execvpe','extsep','fdopen','fsdecode','fsencode','fspath','fstat','fsync','ftruncate','get_exec_path','get_handle_inheritable','get_inheritable','get_terminal_size','getcwd','getcwdb','getenv','getlogin','getpid','getppid','isatty','kill','linesep','link','listdir','lseek','lstat','makedirs','mkdir','name','open','pardir','path','pathsep','pipe','popen','putenv','read','readlink','remove','removedirs','rename','renames','replace','rmdir','scandir','sep','set_handle_inheritable','set_inheritable','spawnl','spawnle','spawnv','spawnve','st','startfile','stat','stat_float_times','stat_result','statvfs_result','strerror','supports_bytes_environ','supports_dir_fd','supports_effective_ids','supports_fd','supports_follow_symlinks','symlink','sys','system','terminal_size','times','times_result','truncate','umask','uname_result','unlink','urandom','utime','waitpid','walk','write']

In [55]:

#这个代码可以把当前模块里所有的代码显示出来,一个都逃不掉,也可以避免遗忘。

创建目录

In [58]:

#创建目录就不用讲了,你懂的

递归创建目录

In [56]:

os.makedirs(r'C:\Users\Jimmy\Desktop\a\b\c')

In [57]:

#此时在我的桌面上已经创建成功了

In [59]:

#如果不信,我们可以用一个代码来查看:

In [61]:

import datetime
datetime.datetime.now()

Out[61]:

datetime.datetime(2018, 4, 1, 15, 37, 0, 252814)

In [62]:

#是不是刚刚创建的?

执行shell命令

In [63]:

#经常呢,我们操作系统下的命令,比我们的代码要强

In [64]:

#如果我们不想自己写命令,可以调用系统的呀

In [67]:

os.system('tree')

Out[67]:

0

In [68]:

#我们看到的结果是一样的。

In [69]:

#当然还有清屏命令,只是说这里Notebook不方便用

In [ ]:

os.system('cls') #我只在这里给出

改变工作目录

In [70]:

os.getcwd()

Out[70]:

'C:\\Users\\Jimmy'

In [71]:

#是这个地方,但是我们是可以改的。

In [72]:

#如果改到桌面,我们就不用那么麻烦的删除

In [73]:

os.chdir(r'C:\Users\Jimmy\Desktop')

In [74]:

#可以看一下,这样就改了。

In [75]:

os.getcwd()

Out[75]:

'C:\\Users\\Jimmy\\Desktop'

In [76]:

#当然,我们还可以改回去。

In [77]:

os.chdir(r'C:\Users\Jimmy')

In [78]:

#现在,又改回来了:

In [79]:

os.getcwd()

Out[79]:

'C:\\Users\\Jimmy'

改变文件或目录的权限

In [80]:

#这个我们先不讲了,因为windows已经先分配好了文件访问权限的,你再一去改,可能电脑就不安全了,文件也乱了。

In [81]:

#这个我们在Lunix上面可以用,现在windows的课程就先不用了

常用OS模块函数(三)

——OS.Path模块函数(一)

os.path.abspath('file.name'):返回文件或目录的绝对路径

os.path.split('file_path'):将路径分隔成目录和文件名,并用一个元组返回

os.path.basename('path'):返回路径最后的文件名,如果后面还有\ /那么返回一个空字符串

os.path.exists('file_path'):如果路径存在,则返回True,反之返回False

os.path.join('file_path','file_name'):路径拼接

In [82]:

dir(os)

Out[82]:

['DirEntry','F_OK','MutableMapping','O_APPEND','O_BINARY','O_CREAT','O_EXCL','O_NOINHERIT','O_RANDOM','O_RDONLY','O_RDWR','O_SEQUENTIAL','O_SHORT_LIVED','O_TEMPORARY','O_TEXT','O_TRUNC','O_WRONLY','P_DETACH','P_NOWAIT','P_NOWAITO','P_OVERLAY','P_WAIT','PathLike','R_OK','SEEK_CUR','SEEK_END','SEEK_SET','TMP_MAX','W_OK','X_OK','_Environ','__all__','__builtins__','__cached__','__doc__','__file__','__loader__','__name__','__package__','__spec__','_execvpe','_exists','_exit','_fspath','_get_exports_list','_putenv','_unsetenv','_wrap_close','abc','abort','access','altsep','chdir','chmod','close','closerange','cpu_count','curdir','defpath','device_encoding','devnull','dup','dup2','environ','errno','error','execl','execle','execlp','execlpe','execv','execve','execvp','execvpe','extsep','fdopen','fsdecode','fsencode','fspath','fstat','fsync','ftruncate','get_exec_path','get_handle_inheritable','get_inheritable','get_terminal_size','getcwd','getcwdb','getenv','getlogin','getpid','getppid','isatty','kill','linesep','link','listdir','lseek','lstat','makedirs','mkdir','name','open','pardir','path','pathsep','pipe','popen','putenv','read','readlink','remove','removedirs','rename','renames','replace','rmdir','scandir','sep','set_handle_inheritable','set_inheritable','spawnl','spawnle','spawnv','spawnve','st','startfile','stat','stat_float_times','stat_result','statvfs_result','strerror','supports_bytes_environ','supports_dir_fd','supports_effective_ids','supports_fd','supports_follow_symlinks','symlink','sys','system','terminal_size','times','times_result','truncate','umask','uname_result','unlink','urandom','utime','waitpid','walk','write']

In [83]:

#os还有很多其它函数,我们这节课只讲一些常用的,其它的会插入到以后的课程中。

In [84]:

os.path

Out[84]:

<module 'ntpath' from 'C:\\ProgramData\\Anaconda3\\lib\\ntpath.py'>

In [85]:

dir(os.path)

Out[85]:

['__all__','__builtins__','__cached__','__doc__','__file__','__loader__','__name__','__package__','__spec__','_get_bothseps','_getfinalpathname','_getfullpathname','_getvolumepathname','abspath','altsep','basename','commonpath','commonprefix','curdir','defpath','devnull','dirname','exists','expanduser','expandvars','extsep','genericpath','getatime','getctime','getmtime','getsize','isabs','isdir','isfile','islink','ismount','join','lexists','normcase','normpath','os','pardir','pathsep','realpath','relpath','samefile','sameopenfile','samestat','sep','split','splitdrive','splitext','splitunc','stat','supports_unicode_filenames','sys']

In [86]:

#这是模块中的模块,它还有很多代码供我们使用。

In [87]:

os.path.abspath(r'.\Desktop\a')

Out[87]:

'C:\\Users\\Jimmy\\Desktop\\a'

In [88]:

#它会显示出a的完整路径

分隔文件夹与文件名

In [89]:

#有时候我们想把文件单独拿出来。

In [90]:

#先在a目录下新建一个1.txt

In [91]:

os.path.abspath(r'.\Desktop\a\1.txt')

Out[91]:

'C:\\Users\\Jimmy\\Desktop\\a\\1.txt'

In [92]:

#检验到确实有这个文件

In [93]:

#但是os.path.abspath这个代码只会把你那上层忽略了的目录拿出来,并不会实际地去考察。

In [94]:

#例如:

In [95]:

os.path.abspath(r'.\Desktop\a\2.txt')

Out[95]:

'C:\\Users\\Jimmy\\Desktop\\a\\2.txt'

In [96]:

#它是一样返回的

In [97]:

os.path.split('.\Desktop\a\1.txt')

Out[97]:

('.', 'Desktop\x07\x01.txt')

In [98]:

#这只是看一下函数的具体效果

In [100]:

mytuple = os.path.split('C:\\Users\\Jimmy\\Desktop\\a\\1.txt')

In [101]:

mytuple

Out[101]:

('C:\\Users\\Jimmy\\Desktop\\a', '1.txt')

In [102]:

mytuple[0]

Out[102]:

'C:\\Users\\Jimmy\\Desktop\\a'

In [103]:

mytuple[1]

Out[103]:

'1.txt'

In [104]:

#这样就就分出来了

返回路径的最后文件名

In [105]:

#这个函数其实不经常用

In [106]:

os.path.basename('C:\\Users\\Jimmy\\Desktop\\a')

Out[106]:

'a'

In [107]:

os.path.basename('C:\\Users\\Jimmy\\Desktop\\')

Out[107]:

''

In [108]:

#如果没东西了,那么它返回的是空

In [109]:

#用这个代码(或称“函数”)可以检验我们目录最后有没有文件

判断路径是否存在

In [111]:

os.path.exists('C:\\Users\\Jimmy\\Desktop\\a\\2.txt')

Out[111]:

False

In [112]:

os.path.exists('C:\\Users\\Jimmy\\Desktop\\a\\1.txt')

Out[112]:

True

In [113]:

#如果有那个文件,就会返回True,如果没有该文件,则返回False。

In [114]:

#判断文件夹是否存在:

In [115]:

os.path.exists('C:\\Users\\Jimmy\\Desktop\\a')

Out[115]:

True

In [116]:

#当然是在的了

In [117]:

os.path.exists('C:\\Users\\Jimmy\\Desktop\\x')

Out[117]:

False

In [118]:

#这就不在了

路径拼接

In [120]:

os.path.join('C:\\A','aaaa')

Out[120]:

'C:\\A\\aaaa'

In [121]:

#它也是不会去检测是否有这个目录的,只是给你组起来。

In [122]:

#所以最好先用exists,再使用这个函数。

常用OS模块函数(三)

——OS.Path模块函数(二)

os.path.isdir('name'):判断是否为目录,返回值为bool

os.path.isfile('name'):判断是都为文件,返回值为bool

os.path.islink('name'):判断是否是链接,返回值为bool

os.path.getsize('path'):返回文件大小,如果文件不存在,就报错

In [123]:

#再来看一下os.path的所有函数:

In [124]:

dir(os.path)

Out[124]:

['__all__','__builtins__','__cached__','__doc__','__file__','__loader__','__name__','__package__','__spec__','_get_bothseps','_getfinalpathname','_getfullpathname','_getvolumepathname','abspath','altsep','basename','commonpath','commonprefix','curdir','defpath','devnull','dirname','exists','expanduser','expandvars','extsep','genericpath','getatime','getctime','getmtime','getsize','isabs','isdir','isfile','islink','ismount','join','lexists','normcase','normpath','os','pardir','pathsep','realpath','relpath','samefile','sameopenfile','samestat','sep','split','splitdrive','splitext','splitunc','stat','supports_unicode_filenames','sys']

判断是否为目录

In [125]:

os.path.isdir('C:\\Users\\Jimmy\\Desktop\\a\\1.txt')

Out[125]:

False

In [126]:

#虽然是存在的文件,但是它判断的是“是否是目录”(目录 = 文件夹)

In [127]:

os.path.isdir('C:\\Users\\Jimmy\\Desktop\\a')

Out[127]:

True

In [128]:

#这样就有。

判断是否是链接

In [129]:

#链接在windos下并不明显,但是在Lunix下面都是有实际的链接给出的,所以在这里我们先不讲。

返回文件大小

In [130]:

os.path.getsize('C:\\Users\\Jimmy\\Desktop\\a\\1.txt')

Out[130]:

0

In [131]:

#现在是以KB为单位的(字节数)。

In [132]:

#是对的吧?

In [133]:

#如果我们在1.txt中写入,读出的还是同步的文件大小。

In [134]:

os.path.getsize('C:\\Users\\Jimmy\\Desktop\\a\\1.txt')

Out[134]:

6

In [135]:

#还是一样对的。

In [136]:

#如果要看文件夹大小呢,也是可以的,不过返回的是0字节。

In [137]:

os.path.getsize('C:\\Users\\Jimmy\\Desktop\\a')

Out[137]:

0

In [138]:

#文件夹的大小跟里面文件的大小是无关的。

In [139]:

#目录大小一直是0。

通过学习os模块,相信同学们应该对Python文件操作更有所了解了,赶快打开自己的编译器,马上整理一下这节课学习的内容吧!

本次只读课堂的python教程就到这了,欢迎下一次的收看!

Python初级第2课——os模块(只读课堂)相关推荐

  1. Python入门第1课——打印(只读课堂)

    In [1]: #欢迎来到"只读课堂"! ...: #Python: ...: In [2]: """Python (计算机程序设计语言) ...: ...

  2. Python基础知识点分享:OS模块的应用

    1.os模块 对于文件和目录进行处理 目录:就是文件夹 属性: os.name:查看当前系统的类型; 如果是windows -> nt 如果是max -> posix os.environ ...

  3. python 中文件输入输出及os模块对文件系统的操作

    整理了一下python 中文件的输入输出及主要介绍一些os模块中对文件系统的操作. 文件输入输出 1.内建函数open(file_name,文件打开模式,通用换行符支持),打开文件返回文件对象. 2. ...

  4. Python技术基础知识点:OS模块的应用

    1.os模块 对于文件和目录进行处理 目录:就是文件夹 属性: os.name:查看当前系统的类型; 如果是windows -> nt 如果是max -> posix os.environ ...

  5. python pitfall (陷阱)--不同平台os模块文件名排序

    2019独角兽企业重金招聘Python工程师标准>>> 标题取的太大了,但只先记录一点,说明python os模块在不同平台下不同的行为.可能以后会添加,主要为抛砖引玉... 环境: ...

  6. Python(七)之OS模块

    文件系统功能:os模块 python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关.以下列举常用的命令: 目录: os.mkdir('/tmp/ ...

  7. AI算法工程师 | 02人工智能基础-Python基础(四)os模块_打开读取文件

    文章目录 Python基础语法 之 文件和流 os 模块 调用操作系统命令 操作文件和目录 案例-文件重命名 打开读取文件 打开文件 读取文件 补充-中文编码问题 Python基础语法 之 文件和流 ...

  8. Python标准库中的os模块

     Python的标准库中的os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux ...

  9. Python之文件操作(含os模块)

    文件的读写操作: 关于文件的读写操作,我们不得不提到系统函数open()函数了. 在使用open()函数时,需要一个变量来接住它,这个变量就相当于一个将Pycharm和文件连接的管道,我们对文件的读写 ...

最新文章

  1. C# 3.0新特性系列(1):隐含类型局部变量
  2. python爬虫基础教程115_Python解析网页源代码中的115网盘链接实例
  3. CSS浏览器兼容问题集-第四部分
  4. php性能优化二(PHP配置php.ini)
  5. 使用命令行加载 jMeter 自定义配置文件里的自定义 property
  6. 平稳序列的预测和拟合之单位根检验
  7. 接口自动化测试系列之PHPUnit-POST请求接口测试方法
  8. C++ vector 内存分配与回收机制
  9. Win7系统C盘空间不足
  10. linux系统如何更改输入法切换快捷键,linux中什么快捷键可实现中英文的切换
  11. Arduino -uno 核心板 之中级系列3 QAU04生日快乐歌实验
  12. HTML的Form和XFORM的区别,Xform是什么意思
  13. 《机器人爱好者(第1辑)》——机器人和人工智能
  14. unity中计算三角形的外接圆
  15. html多页面之间如何通信,html5中sharedWorker实现多页面通信代码示例
  16. 用Python写个开心消消乐小游戏!自己写的游戏就是好玩!
  17. 炼钢-连铸生产动态调度模型(加启发式算法步骤)
  18. Python爬虫学习记录(2)——LDA处理歌词
  19. 2021级新生程序设计班级天梯赛:3-2 小Z爱读书
  20. Recsys2021 | 推荐系统论文整理和导读

热门文章

  1. C# FTP上传(支持断点续传)
  2. 日语0基础—N1的学习资料,百余套~ (提供链接直接下载)
  3. 锁升级过程(无锁、偏向锁、轻量级锁、重量级锁)
  4. 锂电池净化厂房低湿车间装修SICOLAB
  5. 华为服务器查看光口信息,华为、H3C交换机查看光端口收发光情况
  6. adfs服务器获取信息失败,在使用Fiddler或其他诊断工具时无法登陆到ADFS服务器
  7. spring boot视频-网易云课堂视频目录
  8. flutter windows环境配置win10
  9. 第九章 指针 【SEARCH】
  10. mysql.server 脚本解析