python 人生苦短,我学Python
Posted IT_Holmes
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
完
以上是关于python 人生苦短,我学Python的主要内容,如果未能解决你的问题,请参考以下文章