python 人生苦短,我学Python(六)

1. 模块(module) 模块化

在这里插入图片描述
格式:

  • import 模块名(模块名,不包括py后缀)

  • 注意:可以引入同一个模块多次,但是模块的实例只会创建一次。
    在这里插入图片描述

  • import 模块名 as 模块别名; 可以给该模块起别名。

  • __name__可以获取别名的原来名字。

  • __name__的属性值为__main__的模块是主模块,一个程序中只会有一个主模块。

  • 主模块就是我们直接执行的模块。

import impor as i;

# __name__可以获取i的原来名字
print(i.__name__);
print(__name__);
# 引入成功!!
# impor
# __main__

2. 模块的使用

  • 引入模块后,可以调用模块中的任何内容。

  • 也可以引入模块中的部分内容:语法: from 模块名 import 变量,变量… 。

  • from 模块名 import *; 代表引入该模块所有内容。但一般不会使用,推荐引入部分,可以避免变量冲突等等问题。

  • 如果引用多个模块时,变量冲突,重名了!我们可以使用别名as来修改避免。

  • 添加了 _ 的变量,只能在模块内部访问,无法引入。也就是在通过import * 引入时,不会引入 _ 开头的变量。

在这里插入图片描述

  • 通过使用 if __name__ == ‘__main__’ , 来检查当前模块是否为主模块。
    在这里插入图片描述

3. 包(Package)

  • 包也是一个模块。
  • 当我们模块中代码过多,或者一个模块需要被分解为多个模块时,这就需要使用到包。
  • 普通的模块就是一个py文件,而包是一个文件夹。
  • 包中必须有一个__init__.py 文件,这个文件中可以包含包中的主要内容。

在这里插入图片描述

__pycache__模块的缓存文件:
在这里插入图片描述
在__pycache__中保存这结果 .pyc文件的机器码,如下: (目的就是提高我们的运行速度)
在这里插入图片描述

4. Python 标准库

4.1 sys 模块库

  • sys模块,它里面提供了一些变量和函数,使我们可以获取到python解析器的信息。简而言之,通过函数直接操作解析器。

sys.argv 作用:

  • sys.argv 作用:获取执行代码时,命令行中所包含的参数。
  • 该属性是一个列表,列表中保存了当前命令的所有参数。
import sys

# sys.argv 作用:获取执行代码时,命令行中所包含的参数。
# 该属性是一个列表,列表中保存了当前命令的所有参数。
print(sys.argv);

sys.modules 作用:

  • sys.modules 作用:获取当前程序中引入的所有模块。
  • 该属性返回的是一个字典,来记录模块名和模块对象。
import sys

# sys.modules 作用:获取当前程序中引入的所有模块。
# 该属性返回的是一个字典,来记录模块名和模块对象。
print(sys.modules);

sys.path 作用:

  • sys.path 作用:他返回的也是一个列表,列表中保存的时模块的搜索路径。
  • 所谓的搜索路径,就是导入一个模块时,先搜索列表中的第一个,没找到,再找第二个,依次类推。
  • 像pprint这样的模块库,都在安装cpython目录下的lib文件下。
import sys
import pprint

# sys.path 作用:他返回的也是一个列表,列表中保存的时模块的搜索路径。
# 所谓的搜索路径,就是导入一个模块时,先搜索列表中的第一个,没找到,再找第二个,依次类推。
# 像pprint这样的模块库,都在安装cpython目录下的lib文件下。
pprint.pprint(sys.path)

# ['E:\\python\\python-project',
#  'E:\\python\\cpython\\python38.zip',
#  'E:\\python\\cpython\\DLLs',
#  'E:\\python\\cpython\\lib',
#  'E:\\python\\cpython',
#  'E:\\python\\cpython\\lib\\site-packages']
# [Finished in 81ms]

sys.platform 作用:

  • sys.platform 作用:表示当前python运行的平台。
import sys
import pprint

# sys.platform 作用:表示当前python运行的平台。
pprint.pprint(sys.platform)

# 'win32'

在这里插入图片描述

sys.exit() 作用:

  • sys.exit() 作用:函数用来退出程序。
import sys
import pprint

# sys.exit() 作用:函数用来退出程序。
sys.exit('程序出现异常,结束!')

print('因为程序执行了exit函数,所以这里不会打印')

# 程序出现异常,结束
# [Finished in 87ms]

4.2 pprint 模块库(perfect print)

pprint.pprint 作用:pprint模块给我提供了一个方法pprint(),该方法可以用来对打印的数据做简单的格式化。

import sys
import pprint

# sys.modules 作用:获取当前程序中引入的所有模块。
# 该属性返回的是一个字典,来记录模块名和模块对象。

# pprint 作用:该模块给我提供了一个方法pprint(),该方法可以用来对打印的数据做简单的格式化。
pprint.pprint(sys.modules);

在这里插入图片描述

4.3 os 模块库(operating system)

  • os 模块让我们可以对操作系统进行访问。

os.environ 作用:

  • os.environ 作用:通过这个属性可以获得到系统的环境变量。
import pprint
import os # os 模块让我们可以对操作系统进行访问

# os.environ 作用:通过这个属性可以获得到系统的环境变量。
pprint.pprint(os.environ['path']) # 查看path的环境变量。

os.system() 作用:

  • os.system() 作用:可以用来执行操作系统的命令。
import pprint
import os # os 模块让我们可以对操作系统进行访问

# os.system() 作用:可以用来执行操作系统的名字。
os.system('dir') # 显示操作系统当前的文件。
os.system('notepad') # 打开记事本。

5. 异常

在这里插入图片描述
格式:

try:
	代码块(可能出现错误的语句)
except:
	代码块(出现错误以后的处理方式)
else:
	代码块(没出错时要执行的语句)
print('开头')

try:
	# 可能要出错的代码
	print(10/0)
except:
	# 出错后执行的代码
	print('出错了')
else:
	# 没出错执行的代码
	print('没出错')
	
print('结尾')

6. 异常传播

  • 当函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再继续传播。
  • 如果函数中没有对异常处理,则异常会继续向函数调用处传播。
  • 当然函数调用处处理了异常,则不再传播,也不会报错;如果没有处理则继续向调用出传播。
  • 直到传递到全局作用域(主模块),如果依然没有处理,则程序终止,并显示异常信息。

在这里插入图片描述

  • 当程序运行过程中出现异常以后,所有的异常信息会被保存一个专门的异常对象中。
  • 而异常传播时,实际上就是异常对象抛给了调用出。

在这里插入图片描述
try except的注意事项:

  • 如果except后不跟任何的内容,则此时它会捕获到所有的异常。
  • 如果except后跟着一个异常的类型,那么此时它只会捕获该类型的异常。
print('开头')
l = []

try:
	print(l[10])
	print(c)
	print(10/0)
except NameError: # 先检测NameError
	# 如果except后跟着一个异常的类型,那么此时它只会捕获该类型的异常。
	print('这里只是捕获:NameError的异常')
except ZeroDivisionError: # 再检测ZeroDivisionError
	print('这里只是捕获:ZeroDivisionError')
except IndexError: # 再检测IndexError
	print('这里只是捕获:IndexError')
except : # 其他的所有异常
	print('未知异常')
print('结束')

Exception 和 as 起别名

  • exception是所有异常类的父类,所以如果except后跟的是exception,他也会捕获到所有的异常。
  • exception和不写异常 的效果一样的。
print('开头')

try:
	1 + 'hello'
	print(10/0)
except Exception as e: # 这里的e就是一个别名的效果
	print('未知错误:',e,type(e))

print('结束')

# 开头
# 未知错误: unsupported operand type(s) for +: 'int' and 'str' <class 'TypeError'>
# 结束

finally 和 else :

  • finally :无论是否出现异常,该子句都会执行。
  • else :没有出错要执行的语句。
print('开头')
l = []

try:
	print(l[10])
	print(c)
	print(10/0)
except NameError: # 先检测NameError
	# 如果except后跟着一个异常的类型,那么此时它只会捕获该类型的异常。
	print('这里只是捕获:NameError的异常')
except Exception as e: # 其他的所有异常
	print('未知异常')
else:
	print('没有出错要执行的语句');
finally:
	print('无论是否出现异常,该子句都会执行。')

print('结束')

# 开头
# 未知异常
# 无论是否出现异常,该子句都会执行。
# 结束

try是必须的,else语句有没有都行,except和finally至少有一个。

7. raise 抛出异常

  • raise用于向外部抛出异常,后边可以跟一个异常类,或异常类的实例。
def add(a,b):
	# 如果a和b中有负数,调用出就要抛出异常
	if a < 0 or b < 0:
		raise Exception('两个参数中不能有负数!!')
	r = a + b
	return r

print(add(123,123))
print('-----------')
print(add(-1,123))

在这里插入图片描述

8. 自定义异常对象

  • 自定义异常类,只需要创建一个类继承Exception即可。
class MyError(Exception):
	print('我自己定义的错误。')

def add(a,b):
	# 如果a和b中有负数,调用出就要抛出异常
	if a < 0 or b < 0:
		raise MyError('自定义异常')
	r = a + b
	return r

print(add(123,123))
print('-----------')
print(add(-1,123))

在这里插入图片描述

9. 文件(file)

使用python来操作文件的步骤:

  • 第一步:打开文件。
  • 第二步:对文件进行各种操作(读,写),然后保存。
  • 第三步:关闭文件。

9.1 open() 函数 打开文件

  • 使用open()函数来打开一个文件。
file_name = 'text.txt'

file_obj = open(file_name) 

# open方法返回的是一个对象,这个对象就代表当前打开的文件。
print(file_obj)

在这里插入图片描述

9.2 read()函数 读取文件

使用open()来打开的文件,可以将文件分成两种类型:

  • 第一种:纯文本文件(使用uft-8等编码编写的文本文件)。
  • 第二种:二进制文件(图片,mp3,ppt等这些文件)。
  • open()打开文件时,默认是以文本文件的形式打开的,但是open()函数默认的编码为None,如下:
  • 因此处理文件时,必须要指定文件的编码(设置为utf-8就可以)。

在这里插入图片描述

file_name = 'text.txt'

try:
	# open()函数下,指定encoding编码。
	with open(file_name,encoding='utf-8') as file_obj:
		print(file_obj.read())
except FileNotFoundError:
	print(f'{file_name} 文件不存在~~')

# 文本.txt
# [Finished in 129ms]	

read()函数读取较大的文件操作:

  • 调用read()它会将文本文件的所有内容都读取出来。
  • 因此,读取的文件较大的话,会一次性将文件的内容加载到内存中。(容易导致内存溢出)
  • 对于较大的文件,不要直接调用read()函数。

size参数:

  • read()函数可以接受一个size作为参数,该参数用来指定要读取的字符的数量。
  • 可以为size指定一个值,这样read()会读取指定数量的字符。
  • 每次读取都是从上次读取到位置开始读取的。
  • 如果字符的数量小于size,则会读取剩余所有的。
  • 如果已经读取到了文件的最后了,则会返回空串
file_name = 'text.txt'

try:
	with open(file_name,encoding='utf-8') as file_obj:

		# read()函数可以接受一个size作为参数,该参数用来指定要读取的字符的数量。
		# size默认值为-1,读取文件所有的字符。
		# help(file_obj.read) 使用help函数查看函数

		content = file_obj.read(6) # 读取开始的6个
		content = file_obj.read(6) # 从第六个开始读取 ... 一次类推
		content = file_obj.read(6)
		content = file_obj.read(6) 
		print(content)
		print(len(content)) # 计数时,包含换行符号
		print('----------')
except FileNotFoundError:
	print(f'{file_name} 文件不存在~~')

通过使用size来读取大文件:

  • 使用while来打印或者存储一个数据。
file_name = 'text.txt'

try:
	with open(file_name,encoding='utf-8') as file_obj:
		# 定义一个变量,来保存文件的内容
		file_content = ''

		# 定义一个变量,来指定每次读取的大小
		chunk = 100

		# 创建一个循环来读取文件内容
		while True:
			# 读取chunk大小的内容
			content  = file_obj.read(chunk)

			# 检查是否读取到了内容
			if not content:
				break

			file_content += content

except FileNotFoundError:
	print(f'{file_name} 文件不存在~~')

print(file_content)

readline() 和 readlines() 作用:

  • readline() 作用:该方法可以用来读取一行内容。
  • readlines() 作用: 该方法用于一行一行的读取内容,它会一次性将读取的内容封存到一个列表中返回。
import pprint
file_name = 'text.txt'

with open(file_name,encoding='utf-8') as file_obj:
	# readline() 作用:该方法可以用来读取一行内容
	# print(file_obj.readline(),end='')
	# print(file_obj.readline())
	# print(file_obj.readline())
	# print(file_obj.readline())

	# readlines() 作用: 该方法用于一行一行的读取内容,它会一次性将读取的内容封存到一个列表中返回。
	r = file_obj.readlines()
	pprint.pprint(r)

	print('--------------------------')
	# 看第三句话
	pprint.pprint(r[2])

	# print('--------------------------')

	# for t in file_obj:
	# 	print(t) # 通过file_obj直接读取也是可以的

9.3 write() 写入文件

在这里插入图片描述

open()中mode=‘r’ :

  • 使用open()打开文件时,必须指定打开文件所要做的操作(读,写,追加)
  • r代表只读。

open()中mode=‘w’ :

  • w 表示可写。
  • write() 作用向文件写入内容,这个函数执行的前提必须是定义了w。
    在这里插入图片描述
file_name = 'text.txt'

# 使用open()打开文件时,必须指定打开文件所要做的操作(读,写,追加)
# 如果不指定操作类型,则默认是 读取文件 ,而读取文件时时不能像文件中写入的
# w 表示可写
with open(file_name,encoding='utf8',mode='w') as file_obj:
	# write() 作用向文件写入内容
	# 如果操作的是一个文本文件的话,则write()需要传递一个字符串作为参数
	file_obj.write('Hello, 张三\n')
	file_obj.write('Hello, 张三\n')
	file_obj.write('Hello, 张三\n')
	file_obj.write('Hello, 张三\n')
	r = file_obj.write('Hello, 张三\n')
	print(r) # 返回是字符个数

open()中mode=‘a’ :

  • a 表示追加内容,如果了文件不存在会创建文件,如果文件存在则会向文件中追加内容。
file_name = 'text.txt'

# a 表示追加内容
with open(file_name,encoding='utf8',mode='a') as file_obj:
	file_obj.write('Hello, 张三\n')
	r = file_obj.write('Hello, 张三\n')
	print(r) # 返回是字符个数

在这里插入图片描述
二进制文件:
在这里插入图片描述
例如: mode = ‘rb’
在这里插入图片描述

在这里插入图片描述

9.4 close() 函数 和 with … as 语句 关闭文件

close() 函数:

  • close()函数就是要关闭文件的。

with … as 语句:

  • 在with语句中,可以直接使用file_obj来做文件操作。
  • 这个语句结束后,会自动调用close()函数,来关闭文件。
  • 因此,在语句外面调用时会报错的!因为已经关闭了。
file_name = 'text.txt'

# with ... as 语句 
# 下面的语句就等于file_obj = open(file_name)的效果。
with open(file_name) as file_obj:
	# 在with语句中,可以直接使用file_obj来做文件操作
	# 这个语句结束后,会自动调用close()函数,来关闭文件。
	# 因此,在语句外面调用时会报错的!因为已经关闭了。
	print(file_obj.read())

配合异常使用:

file_name = 'text11.txt'

try:
	with open(file_name) as file_obj:
		# read()函数来读取文件
		print(file_obj.read())
except FileNotFoundError:
	print(f'{file_name} 文件不存在~~')`
# text11.txt 文件不存在~~

10. seek() 函数 和 tell() 函数

二进制文件显示如下:
在这里插入图片描述
seek()函数的两个参数:

  • 第一个:是要切换到的位置
  • 第二个:计算位置方式参数:0(从头计算,默认值),1(从当前位置计算),2(从最后位置开始计算)。
  • 简而言之,就是通过seek()函数来调节我们开始想要获取的位置,类似指针。
with open('text.txt',mode='rb') as file_obj:

	# seek()方法可以用来修改当前读取的位置。
	file_obj.seek(55)
	file_obj.seek(80,0)
	file_obj.seek(70,1)
	file_obj.seek(-1,2) # -1就是指,从后开始读的第一个。

	# seek()函数的两个参数:
	# 第一个:是要切换到的位置
	# 第二个:计算位置方式参数:0(从头计算,默认值),1(从当前位置计算),2(从最后位置开始计算)。
	# 简而言之,就是通过seek()函数来调节我们想要看到的内容指针,类似这种。


	# tell()方法用来查看当前读取的位置
	print('当前读取到:',file_obj.tell())

	# print(file_obj.read())

11. 操作系统常见的操作

os.listdir()

  • os.listdir()打印当前目录下的文件名,返回值为列表

os.getcwd()

  • os.getcwd() 获取当前所在的目录

os.chdir()

  • os.chdir() 切换当前所在的目录, 作用相当于cd命令

os.mkdir()

  • os.mkdir() 创建一个目录

os.rmdir()

  • os.rmdir() 删除目录

os.remove()

  • os.remove() 删除文件

os.rename(‘就名字’,‘新名字’)

  • os.rename(‘就名字’,‘新名字’) ,可以对文件进行一个重命名,也可以用来移动一个文件。

import pprint
import os

# os.listdir()打印当前目录下的文件名,返回值为列表
l = os.listdir() 
pprint.pprint(l)

print('---------------')

# os.getcwd() 获取当前所在的目录
g = os.getcwd()
pprint.pprint(g)

print('---------------')

# os.chdir() 切换当前所在的目录, 作用相当于cd命令
# os.chdir('d:/')
# c = os.getcwd()
# print(c)

# os.mkdir() 创建一个目录
# os.mkdir('aaa') 
# os.mkdir('aaa')

# os.rmdir() 删除目录
# os.rmdir('aaa')

# os.remove() 删除文件
# os.remove('text.txt')

# os.rename('就名字','新名字') ,可以对文件进行一个重命名,也可以用来移动一个文件。
os.rename('a.txt','d:/b.txt') 

12. Python 字符格式化format

https://www.w3school.com.cn/python/python_string_formatting.asp

13. Python pip

PIP 是 Python 包或模块的包管理器。
https://www.w3school.com.cn/python/python_pip.asp

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xupengboo

你的鼓励将是我创作最大的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值