自学Python:python中的OS模块与pickle模块

OS模块

OS就是Operating System的缩写,意为操作系统,这可是一个非常高大上的模块,因为在python中,对于文件系统的访问就是通过OS模块来实现的。我们所知道常用的操作系统就有Windows、Mac OS、Linux、UNIX等,这些操作系统底层对于文件系统的访问工作原理是不一样的,因此你可能就要针对不同的系统来考虑使用哪些文件系统模块,这样的做法是非常麻烦的,因为如果程序的运行环境一旦改变,你就要相应的去修改大量的代码来应付。

但是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)重命名
system(command)运行系统的shell命令
以下是支持路径操作中常用到的一些定义,支持所有平台
os.curdir指代当前目录 == (’.’)
os.pardir指代上一级目录 == (’..’)
os.sep输出操作系统特定的路径分隔符(在windows下为’\\’,Linux下为‘/’)
os.linesep当前平台使用的行终止符(在Windows下为’\r\n’,Linux下为’\n’)
os.name指代当前实用的操作系统(包括’posix’、‘nt’、‘mac’、‘os2’、‘ce’、‘java’)

1、getcwd()
有些情况下我们需要获得应用程序当前的工作目录(比如要保存临时文件),那么可以使用getcwd()函数获得:

>>> import os
>>> os.getcwd()
'E:\\Program Files (x86)\\python37-32'

在这里插入图片描述
2、chdir(path)

>>> os.chdir('E:/a')
>>> os.getcwd()
'E:\\a'

在这里插入图片描述
3、listdir(path = ‘.’)
有时候你可能需要知道当前工作目录下有哪些文件和子目录,那么listdir()函数可以帮你列举出来。path参数用于指定列举的目录,默认值是’.’,代表根目录,也可以使用’..'代表上一级目录:

>>> os.chdir('E:/Program Files')
>>> os.listdir(path = '.')
['Tencent', 'YouKu']

在这里插入图片描述

os.listdir('./Tencent')

在这里插入图片描述
4、mkdir(path)
mkdir()函数用于创建文件夹,如果该文件夹存在,则抛出FileExistsError异常:
在这里插入图片描述
在这里插入图片描述
5、makedirs(path)
makedirs()函数可用于创建多层目录,用过linux系统的都知道,在linux中的话,要建立多层目录可以使用mkdir /A/B/C/D -p

>>> os.chdir('E:/a')
>>> os.listdir()
>>> ['B']
>>> os.makedirs('E:/a/A/B/C')
>>> os.listdir('E:/a/')
['A', 'B']
>>> os.listdir('E:/a/A/B/')
['C']

在这里插入图片描述

在这里插入图片描述
6、remove(path)、rmdir(path)和removedirs(path)
remove()函数用于删除指定的文件,注意是删除文件,不是删除目录。如果需要删除目录,则用rmdir()函数;如果要删除多层目录,则用removedirs()函数。

>>> os.chdir('E:/A/A/B/C')
>>> os.listdir()
['test.txt']
>>> os.remove('test.txt')
>>> os.listdir()
[]
>>> os.chdir('E:/A/A/B/')
>>> os.listdir()
['C']
>>> os.rmdir('C')
>>> os.listdir()
[]
>>> os.chdir('E:/A/')
>>> os.removedirs('E:/A/A/B')
>>> os.listdir()
['B']

7、rename(old, new)
rename()函数用于重命名文件或者文件夹

>>> os.listdir()
['B']
>>> os.rename('B', 'TEST_DIR')
>>> os.listdir()
['TEST_DIR']
>>> os.chdir('TEST_DIR')
>>> os.listdir()
['C', 'test2.txt']
>>> os.rename('test2.txt', 'new_test.txt')
>>> os.listdir()
['C', 'new_test.txt']

在这里插入图片描述
8、system(command)
os模块的这个方法我个人感觉在linux系统中非常好用,在一些运维自动化脚本中用的非常频繁,当然在windows中也可以用,几乎每个操作系统都会提供一些小工具,system()函数用于使用这些小工具,她或使用相应的命令将这些工具调出来,比如说windows中的计算器,在dos窗口我们需要使用calc命令调出,因此,在python中我们可以使用system()函数调用计算器

>>> os.system('calc')

在这里插入图片描述
9、walk(top)
最后是walk()函数,这个函数在有些时候确实非常有用,可以省去很多麻烦。该函数的作用是遍历top参数指定路径下的所有子目录,并将结果返回一个三元组(路径,[包含目录],[包含文件])。看一下下面的例子:

>>> os.getcwd()
'E:\\A'
>>> for i in os.walk('.'):
 print(i)
 
('.', ['TEST_DIR', 'TEST_DIR2'], [])
('.\\TEST_DIR', ['C'], ['new_test.txt'])
('.\\TEST_DIR\\C', ['gd0306'], ['test.png'])
('.\\TEST_DIR\\C\\gd0306', [], ['gd0306.txt'])
('.\\TEST_DIR2', ['NEW_DIR'], ['test2.txt'])
('.\\TEST_DIR2\\NEW_DIR', [], ['test3.txt'])

在这里插入图片描述

os.path

除了上面提到的os模块的一些功能外,还有一个强大的模块是os.path,它可以完成一些针对路径名的操作。其常用的函数方法有:

函数名使用方法
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, path2)判断path1和path2两个路径是否指向同一个文件

1、basename(path)和dirname(path)
basename()和dirname()函数分别用于获得文件名和路径名:

>>> os.path.dirname(r'E:/A/TEST_DIR/new_test.txt')
'E:/A/TEST_DIR'
>>> os.path.basename(r'E:/A/TEST_DIR/new_test.txt')
'new_test.txt'

在这里插入图片描述
2、join(path1[,path2[, …]])
join()函数跟BIF的那个join()函数不同,os.path.join()是用于将路径名和文件名组合成一个完整的路径,这个目录路径和文件都可以不存在:

>>> os.path.join(r'E:/A/TEST_DIR', 'gd.txt')
'E:/A/TEST_DIR\\gd.txt'
>>> os.path.join(r'E:/A/TEST_DIR3', 'gd.txt')
'E:/A/TEST_DIR3\\gd.txt'

3、split(path)和splitext(path)
split()和splitext()函数都用于分割路径,split()函数分割路径和文件名(如果完全使用目录,他也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在);splitext()函数则是用于分割文件名和扩展名:

>>> os.path.split('E:/A/TEST_DIR/new_test.txt')
('E:/A/TEST_DIR', 'new_test.txt')
>>> os.path.splitext('E:/A/TEST_DIR/new_test.txt')
('E:/A/TEST_DIR/new_test', '.txt')

在这里插入图片描述
4、getsize(file)
getsize()函数用于获取文件的尺寸,返回值是以字节为单位的:

>>> os.path.getsize('E:/A/TEST_DIR/new_test.txt')
2170

在这里插入图片描述
5、getatime()、getctime()、getmtime()
这三个函数分别用于获取文件的最近访问时间、创建时间和修改时间。不过返回值是浮点型秒数,可用time模块的gmtime()或localtime()函数换算:

>>> import time
>>> temp = time.localtime(os.path.getatime('E:/A/TEST_DIR/new_test.txt'))
>>> print('E:/A/TEST_DIR/new_test.txt 被访问的时间是:', time.strftime('%d %b %Y %H: %M: %S', temp))
E:/A/TEST_DIR/new_test.txt 被访问的时间是: 23 May 2019 22: 12: 44
>>> 
>>> temp = time.localtime(os.path.getctime('E:/A/TEST_DIR/new_test.txt'))
>>> print('E:/A/TEST_DIR/new_test.txt 被创建的时间是:', time.strftime('%d %b %Y %H: %M: %S', temp))
E:/A/TEST_DIR/new_test.txt 被创建的时间是: 23 May 2019 20: 49: 56
>>> 
>>> temp = time.localtime(os.path.getmtime('E:/A/TEST_DIR/new_test.txt'))
>>> print('E:/A/TEST_DIR/new_test.txt 被修改的时间是:', time.strftime('%d %b %Y %H: %M: %S', temp))
E:/A/TEST_DIR/new_test.txt 被修改的时间是: 23 May 2019 22: 12: 44

在这里插入图片描述

pickle:泡菜?

pickle是python提供的一个标准模块,使用这个模块,可以非常容易地将列表、字典这类复杂数据类型存储为文件了。
pickle就是泡菜,腌菜的意思,用官方文档中的话说,这是一个令人惊叹的模块,它几乎可以把所有python的对象都转化为二进制的形式存放,这个过程称为pickling,那么从二进制形式转化会对象的过程称为unpickling。
我们来举一个将列表数据保存到文件的例子:

import pickle as p

my_list = [123, 345, 'pythoner', [12, 34, 56]]

# 使用二进制可写的方式创建一个文件
pickle_file = open('E:/A/TEST_DIR/C/my_list.pkl', 'wb')

# 使用pickle模块的dump方法将数据保存到创建的.pkl文件中
p.dump(my_list, pickle_file)

# 关闭文件
pickle_file.close()

运行这段python代码之后,就会出现my_list.pkl这个文件,里面存储的数据格式为二进制,所以要打开的话要以二进制方式打开,还有这个文件的后缀名是随意的,使用pkl是为了方便记忆与分辨。

在这里插入图片描述
在这里插入图片描述
我们要想在python中将之前保存到文件的列表数据还原,就需要在python中以二进制可读的方式打开pkl文件,随后再使用pickle模块的load方法将数据加载进来

import pickle as p

# 使用二进制可读的方式打开之前保存列表数据的pkl文件
pickle_file = open('E:/A/TEST_DIR/C/my_list.pkl', 'rb')

# 调用pickle模块的load方法将列表数据加载到my_list对象中
my_list = p.load(pickle_file)
print(my_list)

运行这段代码就可以得到我们之前的列表了
在这里插入图片描述
利用pickle模块不但可以保存列表数据,其实他可以保存任何你能想象到的东西!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值