`
三、常用模块功能
1.文件IO操作
使用 open()
函数创建或打开文件
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
- file:表示将要打开的文件的路径,也可以是要被封装的整数类型文件描述符。
- mode:是一个可选字符串,用于指定打开文件的模式,默认值是
'r'
(以文本模式打开并读取)。可选模式如下:
r | 读取(默认) |
---|---|
w | 写入,并先截断文件 |
x | 排它性创建,如果文件已存在则失败 |
a | 写入,如果文件存在则在末尾追加 |
b | 二进制模式 |
t | 文本模式(默认) |
+ | 更新磁盘文件(读取并写入) |
-
buffering:是一个可选的整数,用于设置缓冲策略。
-
encoding:用于解码或编码文件的编码的名称。
-
errors:是一个可选的字符串,用于指定如何处理编码和解码错误(不能在二进制模式下使用)。
-
newline:区分换行符。
-
closefd:如果 closefd 为 False 并且给出了文件描述符而不是文件名,那么当文件关闭时,底层文件描述符将保持打开状态;如果给出文件名,closefd 为 True (默认值),否则将引发错误。
-
opener:可以通过传递可调用的 opener 来使用自定义开启器。
#mode = 'w' 则会清除文件内容,重新往文件里面写值 #mode = 'a' 则会再文件末尾追加字符串 Test = open('D:\\Pythons.txt', mode='w', encoding='utf-8') Test.write('看博客的人是帅哥') Test.close() #使用完成一定要关闭文件,否则会导致文件一直被占用
也可使用with as 打开文件,这样使用完会自动关闭文件
with open('D://Pythons.txt',mode='a', encoding='utf-8') as test:
test.write('看博客的人是帅哥')
对于文件的读操作,Python 文件对象提供了三个函数,如下所示:
函数 | 描述 |
---|---|
read(size) | 读取指定的字节数,参数可选,无参或参数为负时读取所有 |
readline() | 读取一行 |
readlines() | 读取所有行并返回列表 |
with open('D:\\Pythons.txt', mode='r', encoding='utf-8') as rf:
print('readline-->', rf.readline())
print('read-->', rf.read(8))
print('readlines-->', rf.readlines())
2.OS模块
python提供不通操作系统的接口,并且将其用统一的接口封装调用,提高代码的可移植性
函数 | 描述 |
---|---|
os.getcwd() | 获取当前路径 |
os.listdir(path) | 返回路径下所有的文件夹 |
print(os.path.abspath(path) | 返回指定路径下的绝对路径 |
os.path.split(path) | 拆分制定路径的目录与文件 |
os.path.join(path, *paths) | 将一个或多个 path(文件或目录) 进行拼接。 |
os.path.getctime(path) | 返回 path(文件或目录) 在系统中的创建时间。 |
os.path.getmtime(path) | 返回 path(文件或目录)的最后修改时间。 |
os.path.getatime(path) | 返回 path(文件或目录)的最后访问时间。 |
os.path.exists(path) | 判断 path(文件或目录)是否存在,存在返回 True,否则返回 False。 |
os.path.isdir(path) | 判断 path 是否为目录。 |
os.path.isfile(path) | 判断 path 是否为文件。 |
os.path.getsize(path) | 返回文件大小 |
os.mkdir() | 创建一个目录,之前的目录不存在会报错 |
os.chdir(path) | 将当前工作目录更改为 path。 |
os.system(command) | 调用 shell 脚本。 |
try:
for i in os.path.split('D://Pythons.txt'):
print(i)
except:
pass
finally:
print('看博客的人永远最帅')
- try: 正常代码块,出现异常时会被捕捉
- except:异常代码块,当‘try’中代码出现异常时,会被捕捉,然后执行except逻辑语句。
- finally:不管代码是否抛出异常最终都会执行finally下的逻辑语句,优先级最低,最后执行。
4.装饰器
装饰器分为装饰函数与业务函数两部分,在业务函数上添加 @装饰函数(类)名
使用方法上可分为基于函数与基于类的使用方式,实际上装饰器的 @...
相当于将被装饰的函数(业务函数)作为参数传入装饰函数(类)。
基于函数
# 装饰函数
def funA(fun):
def funB(*args, **kw):
print('函数 ' + fun.__name__ + ' 开始执行')
fun(*args, **kw)
print('函数 ' + fun.__name__ + ' 执行完成')
return funB
@funA
# 业务函数
def funC(name):
print('Hello', name)
funC('Jhon')
基于类
class Test(object):
def __init__(self, func):
print('函数名是 %s ' % func.__name__)
self.__func = func
def __call__(self, *args, **kwargs):
self.__func()
@Test
def hello():
print('Hello ...')
hello()
5.global & nonlocal
global :关键字,可以在内部作用域内修改外部作用域的变量
d = 0
def Add(a, b):
global d
d = a + b
print('内部作用域 : ', d) #输出10
Add(5, 5)
print('外部作用域 : ', d) #输出10
内部作用域内内 global 标记的变量 可以在外部作用域不存在 此时为函数内的局部变量
外部作用域的d可在任意顺序定义,但输出的数据与程序的执行顺序有关
nonlocal:关键字,用于修改嵌套作用域中的变量
def outer():
d = 1
def inner():
nonlocal d
d = 2
print('inner:', d) #输出2
inner()
print('outer:', d) #输出2
outer()