文章目录
菜鸟学python之基础篇
Error和Exception
Error和Exception都是Python中异常处理的重要概念。
Error表示程序本身出现错误
Exception表示程序运行过程中可能出现的异常情况
Python中的异常(Exception)是当程序运行过程中遇到错误或者异常情况时,程序可以捕获并处理这些错误或者异常。异常是程序在执行过程中产生的错误信息,它可以提供有关错误发生的详细信息,以便程序员能够更好地解决问题。
异常处理
Python中异常处理通过try-except语句实现。try-except语句的语法格式如下:
try:
# 可能出现异常的代码
except [ErrorType1[, ErrorType2[,...,ErrorTypeN]]]:
# 处理异常的代码
else:
# 没有异常时执行的代码
finally:
# 无论是否出现异常都会执行的代码
try-except语句的执行流程如下:
- 执行try子句中的代码,如果代码出现异常,则try子句中与该异常对应的except子句会被执行,try子句继续执行
- 如果try子句中没有与异常对应的except子句,则异常会被传递给上层调用者
- 如果try子句中没有异常,则except子句会被忽略
- 无论try子句中是否出现异常,finally子句都会被执行
异常类型
Python中的异常类型有很多,下面列举一些常见的异常类型:
异常类型 | 描述 |
---|---|
BaseException | 所有异常的基类 |
SystemExit | 解释器请求退出 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
Exception | 常规错误的基类 |
StopIteration | 迭代器没有更多的值 |
GeneratorExit | 生成器(generator)已经完成执行 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除以零 |
AssertionError | 断言语句失败 |
AttributeError | 对象没有这个属性 |
EOFError | 没有内建输入,到达EOF标志 |
EnvironmentError | 操作系统错误的基类 |
IOError | 输入/输出操作失败 |
ImportError | 导入模块失败 |
Python中的异常分为两种:已检查异常(Checked Exceptions)和未检查异常(Unchecked Exceptions)。已检查异常需要程序员在代码中显式处理,而未检查异常则不需要。已检查异常包括IOError、ValueError、KeyError等,这些异常在程序中可以通过try-except语句捕获并处理。未检查异常包括SystemError、MemoryError等,这些异常通常是由于程序本身出现错误而导致的,无法通过try-except语句捕获。
在Python中,可以使用try-except语句捕获并处理异常。try块包含可能引发异常的代码,而except块包含处理异常的代码。如果try块中的代码引发异常,程序会跳转到except块,执行except块中的代码,然后继续执行程序的其他部分。
try:
# 可能引发异常的代码
result = 10 / 2
print(result)
except ZeroDivisionError:
# 处理异常
print("除数不能为零")
except TypeError:
# 处理异常
print("类型错误")
File
在Python中,file是一个内置的文件对象,用于表示一个文件或文件的指针。文件对象可以用于读取、写入、关闭和 seek 文件。
使用open()函数可以创建一个file对象,该函数需要两个参数:文件名和模式。文件名指定要打开的文件的位置,模式指定如何打开文件。例如,下面的代码使用open()函数打开一个名为test.txt的文件,并以读取模式打开:
# 打开文件
file = open("test.txt", "r")
# 读取文件
content = file.read()
# 关闭文件
file.close()
# 打开文件
file = open("test.txt", "w")
# 写入文件
file.write("hello world")
# 关闭文件
file.close()
open()
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
- file: 必需,文件路径(相对或者绝对路径)。
- mode: 可选,文件打开模式
模式 | 描述 |
---|---|
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
U | 通用换行模式(Python 3 不支持)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
- buffering: 设置缓冲
- encoding: 一般使用utf8
- errors: 报错级别
- newline: 区分换行符
- closefd: 传入的file参数类型
- opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。
属性
name:返回文件名
mode:返回文件模式
closed:返回文件是否已关闭
fileno():返回文件描述符
encoding:返回文件编码方式
方法
read():读取文件内容
readline():读取一行内容
readlines():读取所有行内容
write():写入文件内容
close():关闭文件
seek():移动文件指针
tell():获取文件指针位置
flush():刷新文件缓存
标准库
Python的标准库是Python中最基础、最常用的库之一,包含了Python中最常用的模块和函数。标准库提供了丰富的功能和工具,使得Python在各种场景下都能发挥巨大作用。
Python的标准库包含了许多模块和包,每个模块和包都有其特定的功能和用途。例如,os模块提供了与操作系统交互的功能,math模块提供了数学计算的功能,re模块提供了正则表达式的功能,json模块提供了JSON编码和解码的功能等。
下面是一些常见的Python标准库模块和包:
- os:提供与操作系统交互的功能
- sys:提供与Python解释器相关的功能
- math:提供数学计算功能
- re:提供正则表达式功能
- json:提供JSON编码和解码功能
- urllib:提供访问URL的功能
- time:提供了处理时间的函数,例如获取当前时间、格式化日期和时间、计时等
- datetime: 提供了更高级的日期和时间处理函数,例如处理时区、计算时间差、计算日期差等
- random:提供了生成随机数的函数,例如生成随机整数、随机字符串等
os模块示例
Python 的 os 模块提供了与操作系统交互的功能,可以用来获取环境变量、修改目录、获取文件信息等。下面是一些使用 os 模块的示例:
1. 获取环境变量:
import os
# 获取一个环境变量
env_var = os.environ.get('PATH')
print(env_var)
2. 修改目录:
import os
# 创建一个目录
os.mkdir('my_directory')
# 修改目录
os.chdir('my_directory')
# 删除目录
os.rmdir('my_directory')
3. 获取文件信息:
import os
# 获取文件大小
file_size = os.path.getsize('example.txt')
print(file_size)
# 获取文件名
file_name = os.path.basename('example.txt')
print(file_name)
# 获取文件路径
file_path = os.path.dirname('example.txt')
print(file_path)
4. 获取当前目录:
import os
# 获取当前目录
current_dir = os.path.abspath(os.path.curdir)
print(current_dir)
5. 获取文件夹内容:
import os
# 获取文件夹内容
folder_content = os.listdir('my_folder')
print(folder_content)
6. 获取命令行参数:
import os
# 获取命令行参数
cmd_args = os.sys.argv
print(cmd_args)
7. 获取用户输入:
import os
# 获取用户输入
user_input = input('请输入内容:')
print(user_input)
8. 获取终端大小:
import os
# 获取终端大小
terminal_size = os.get_terminal_size()
print(terminal_size)
9. 获取进程信息:
import os
# 获取进程信息
pid = os.getpid()
print(pid)
10. 获取当前时间:
import os
# 获取当前时间
current_time = os.get_terminal_size()
print(current_time)
11. 获取文件属性:
import os
# 获取文件属性
file_attr = os.stat('example.txt')
print(file_attr)
12. 获取文件所有者:
import os
# 获取文件所有者
file_owner = os.stat('example.txt').st_uid
print(file_owner)
13. 获取文件所有者组:
import os
# 获取文件所有者组
file_group = os.stat('example.txt').st_gid
print(file_group)
14. 获取文件所有者权限:
import os
# 获取文件所有者权限
file_permission = os.stat('example.txt').st_mode
print(file_permission)
15. os.path
import os
# 获取文件名
file_name = os.path.basename('/path/to/file.txt')
print(file_name)
# 获取文件扩展名
file_ext = os.path.splitext('/path/to/file.txt')[1]
print(file_ext)
print(file_ext[1:])
# 构建文件路径
file_path = os.path.join('/path/to/dir', 'file.txt')
# file_path = os.path.join('path','to','dir', 'file.txt')
print(file_path)
# 获取目录路径
dir_path = os.path.dirname('/path/to/file.txt')
print(dir_path)
# 获取文件名
file_name = os.path.basename('/path/to/file.txt')
print(file_name)
# 获取文件扩展名
file_ext = os.path.splitext('/path/to/file.txt')[1]
print(file_ext)
datetime模块示例
Python 的 datetime 模块提供了与日期和时间相关的功能,可以用来获取当前日期和时间、计算时间间隔、格式化日期和时间等。
import datetime
# 获取当前日期和时间
current_time = datetime.datetime.now()
print(current_time)
# 获取两个日期和时间
time1 = datetime.datetime(2023, 11, 20, 12, 0, 0)
time2 = datetime.datetime(2023, 11, 20, 15, 30, 0)
# 计算时间间隔
time_difference = time2 - time1
print(time_difference)
# 格式化日期和时间
formatted_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(formatted_time)
# 获取日期和时间字符串
time_str = '2023-11-20 12:00:00'
# 解析日期和时间字符串
parsed_time = datetime.datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S')
print(parsed_time)
print(parsed_time.year,
parsed_time.month,
parsed_time.day,
parsed_time.hour,
parsed_time.minute,
parsed_time.second)
re模块示例
Python 的 re 模块提供了正则表达式的功能,可以用来匹配和处理文本字符串。
常用的函数和类
Function | Descriptions |
---|---|
re.search() | 搜索字符串中是否匹配某个模式,返回匹配对象。 |
re.findall() | 搜索字符串中所有匹配某个模式的字符串,返回列表。 |
re.finditer() | 搜索字符串中所有匹配某个模式的字符串,返回迭代器。 |
re.sub() | 替换字符串中的所有匹配某个模式的字符串,返回替换后的字符串。 |
re.subn() | 替换字符串中的所有匹配某个模式的字符串,返回替换后的字符串和替换次数。 |
re.split() | 将字符串按照某个模式分割成多个子字符串,返回列表。 |
re.escape() | 将正则表达式中的特殊字符转义,返回字符串。 |
re.compile() | 将正则表达式编译成正则表达式对象,方便多次使用。 |
re.error | 正则表达式错误信息。 |
re.constants | 正则表达式相关常量的模块。 |
re.Pattern | 正则表达式模式对象,可以进行匹配和查找操作。 |
re.Match | 匹配对象,包含匹配的文本、匹配的子串等信息。 |
re.Group | 子串对象,包含匹配的子串信息。 |
re.TypedString | 带有类型信息的字符串对象,可以指定字符串的类型。 |
re.TypedPattern | 带有类型信息的正则表达式模式对象,可以指定正则表达式的类型。 |
模式
- .:匹配任意字符,除了换行符。
- *:匹配零个或多个字符。
- +:匹配一个或多个字符。
- ?:匹配零个或一个字符。
- ^:匹配字符串的开头。
- $:匹配字符串的结尾。
- []:匹配括号内的任意字符。
- |:匹配多个模式之一。
- \:转义字符,用于匹配特殊字符。
- \d:匹配数字。
- \D:匹配非数字。
- \s:匹配空白字符(空格、制表符和换行符)。
- \S:匹配非空白字符。
- \w:匹配单词字符(字母、数字和下划线)。
- \W:匹配非单词字符。
- \b:匹配单词边界。
- \B:匹配非单词边界。
- \z:匹配字符串的结尾。
- \Z:匹配字符串的开头。
- \n:匹配换行符。
- \r:匹配回车符。
- \t:匹配制表符。
- \1…\9:匹配捕获组中的子串。
- \10:匹配第10个捕获组中的子串。
常用的字符串操作函数
- str.replace():替换字符串中的子串。
- str.split():将字符串按照指定的分隔符分割成多个子字符串。
- str.join():将多个字符串按照指定的分隔符连接成一个字符串。
- str.find():查找字符串中是否包含子串,返回子串的索引。
- str.rfind():查找字符串中是否包含子串,返回子串的索引,从字符串的末尾开始查找。
- str.index():查找字符串中是否包含子串,返回子串的索引。
- str.rindex():查找字符串中是否包含子串,返回子串的索引,从字符串的末尾开始查找。
- str.startswith():检查字符串是否以指定的子串开始。
- str.endwith(): 检查字符串是否以指定的子串结束。
- str.strip():删除字符串两端的空白字符。
- str.lstrip():删除字符串左端的空白字符。
- str.rstrip():删除字符串右端的空白字符。
- str.upper():将字符串转换为大写。
- str.lower():将字符串转换为小写。
- str.capitalize():将字符串的第一个字符大写。
- str.count():计算字符串中子串出现的次数。
- str.findall():查找字符串中所有子串,返回一个列表。
import re
# 定义正则表达式
pattern = r'\d+'
# 获取文本字符串
text = 'There are 123 cats in the house.'
# 匹配数字
match = re.search(pattern, text)
print(match.group()) # 123
# 定义正则表达式
pattern = r'dog'
replacement = 'cat'
# 获取文本字符串
text = 'The dog ran away.'
# 替换字符串
new_text = re.sub(pattern, replacement, text)
print(new_text) # The cat ran away.
# 定义正则表达式
pattern = r'\w+'
# 获取文本字符串
text = 'Hello, world! How are you today?'
# 匹配所有字符串
matches = re.findall(pattern, text)
print(matches) # ['Hello', 'world', 'How', 'are', 'you', 'today']
# 定义正则表达式
pattern = r'\d+'
# 获取文本字符串
text = 'There are 123 cats in the house.'
# 匹配字符串位置
match = re.search(pattern, text)
print(match.start()) # 10
# 定义正则表达式
pattern = r'(dog|cat)'
# 获取文本字符串
text = 'The dog ran away.'
# 匹配字符串组
match = re.search(pattern, text)
print(match.group(1)) # dog
# 定义正则表达式
pattern = r'(dog|cat)\1'
# 获取文本字符串
text = 'The dog ran away. The cat sat down.'
# 匹配重复字符串
match = re.search(pattern, text)
print(match) # None
# 定义正则表达式
pattern = r'\d+'
# 获取文本字符串
text = 'There are 123 cats in the house.'
# 匹配字符串条件
match = re.search(pattern, text)
if match:
print(match.group())
else:
print('No match found')
# 定义正则表达式
pattern = r'(dog|cat)(\d+)'
# 获取文本字符串
text = 'The dog ran away. The cat sat down.'
# 匹配字符串条件组
match = re.search(pattern, text)
if match:
print(match.group(1))
print(match.group(2))
else:
print('No match found')
random
Python 的 random 模块提供了生成伪随机数的功能,可以用来生成随机数、选择列表中的随机元素等。
import random, string
# 生成 1 到 10 之间的随机数
random_number = random.randint(1, 10)
print(random_number)
# 生成 0 到 1 之间的随机浮点数
random_float = random.random()
print(random_float)
# 定义一个列表
my_list = [1, 2, 3, 4, 5]
# 从列表中随机选择一个元素
random_element = random.choice(my_list)
print(random_element)
# 定义一个列表
my_list = [1, 2, 3, 4, 5]
# 打乱列表中的元素顺序
random.shuffle(my_list)
print(my_list)
# 定义一个字符集
characters = string.ascii_letters + string.digits
# 生成一个随机字符串
random_string = ''.join(random.choice(characters) for i in range(10))
print(random_string)
# 定义一个字符集
uppercase_letters = string.ascii_uppercase
# 生成一个随机大写字母字符串
random_uppercase_string = ''.join(random.choice(uppercase_letters) for i in range(10))
print(random_uppercase_string)