目录

一、模块

(1)模块的含义

(2)模块的分类和导入

import 模块名

import 模块名 as 别名

from 模块名 import * / from 模块名 import 功能名       

(3)模块拓展:time模块中的time()方法

(4)自定义模块

__name__测试自定义模块功能

模块命名的注意事项

二、Package包

(1)什么是包

(2)包调用时的多种用法

三、Python文件操作

(1)什么是文件

(2)文件的基本操作

文件打开

文件路径

文件写入和关闭

文件的读取

文件操作的mode模式

文件备份的案例

(3)文件夹的基本操作

 四、Python异常

(1)什么是异常

(2)捕获异常并输出

常规捕获

常见异常类型

异常捕获的else语句

异常捕获的finally语句


一、模块

(1)模块的含义

Python模块就是一个Python文件,以.py结尾,包含了Python对象和语句,可以定义函数,类和变量,可以包含可执行的代码

(2)模块的分类和导入

模块通常分为:内置模块和自定义模块

导入方式:

import 模块名

import 模块名 as 别名

from 模块名 import *

from 模块名 import 功能名                  

import 模块名

导入模块名,代码:

import math

print(math.sqrt(4))

引入math模块,sqrt()求的是数的平方根

效果如下:

也可以引用多个:

import math,random

print(math.sqrt(9))
print(random.randint(1,10))

randint()是生成两数之间的随机数

效果如下:

import 模块名 as 别名

通过as关键字导入别名

代码:

import math as m

print(m.sqrt(4))

就是用别名代替模块名进入程序使用

from 模块名 import * / from 模块名 import 功能名       

那么有了import导入模块,为什么还要这种方式:

import代表导入某个或多个模块的所有功能,而有时候我们希望只导入模块中的某些方法,而不是全部,这时候就建议使用这个方法

from 模块名 import * 就是导入这个模块所有功能 == import 模块名
 from 模块名 import 功能名 
代码:  
from math import sqrt

print(sqrt(4))

这样使用时可以直接使用功能而不需要先引用模块

(3)模块拓展:time模块中的time()方法

time()是用于返回当前秒数的,一般被称为时间戳

代码:

import time

start = time.time()
list1 = [i for i in range(10000000)]
end = time.time()
print(f'以上代码一共执行了{end - start}秒')

效果如下:

(4)自定义模块

刚刚上述的都是内置模块,而自定义模块通过自己定义一个python文件,然后在需要执行的代码中导入

首先需要创建一个自定义文件,.py为后缀:

在自定义文件中创建我们需要的代码:

在执行代码中使用,代码:

import f1

print(f1.jia_1(1,2))

效果如下:

这就是自定义模块的用法

__name__测试自定义模块功能

用法:if __name__ == '__main__':测试代码

代码:

def jia_1(a, b):
    return a + b


if __name__ == '__main__':
    print(jia_1(1, 2))

效果与上题一样

模块命名的注意事项

需要注意的是,在命名时尽量不要取内置模块的名称,和变量不要取关键字的名称是一个道理

__file__魔术变量可以查看模块引用的顺序

首先创建了一个math.py的自定义文件,然后输入代码:

import math

print(math.sqrt(9))
print(math.__file__)

发现先报错然后再执行sqrt()方法:

二、Package包

(1)什么是包

包是将模块组织到一起,并放在一个文件夹中,在文件夹下创建了一个__init__.py的文件,而这个文件夹就是包,也叫工具包

举个例子:首先创建一个名为f2的包,在其中创建两个自定义文件

在两个文件中分别写入:

引用时要遵照import 包名.模块名

调用时要遵照包名.模块名.方法名

代码:

import f2.math1
import f2.math2

num1 = f2.math1.jian_1(1, 2)
print(num1)
num2 = f2.math2.cheng_1(1, 2)
print(num2)

效果如下:

(2)包调用时的多种用法

也可以通过from 包名 import *导入包中的所有模块

调用时使用模块名.方法名

代码:

from f2 import *

num1 = math1.jian_1(1, 2)
print(num1)

注意,这种方法使用有条件,需要在__init__.py文件中__all__魔术变量控制导入模块才能使用

效果如下:

而这种方法只对这个形式有效

这部分说了很多魔术变量,后面会统一说明

三、Python文件操作

(1)什么是文件

为了方便数据的管理和检索在内存中长久保存数据,这才引入了文件的概念

文件分为文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别

文件操作一般为创建文件、打开文件、文件读写、文件备份

(2)文件的基本操作

其实关于文件的操作在学习RPA时已经有所使用,这里就简单说明

文件打开

open()函数打开一个已经存在的文件或者创建一个新文件

代码:

f = open(name,mode)

这返回的是一个file文件对象,这个代码当然不是能直接使用的,name是指你指定的文件名字,一般以字符串形式,也可以是文件所在具体路径;而mode则是指打开文件模式,后面会讲到,现在只需要知道:r -- 只读;w -- 写入;a -- 追加

文件路径

文件路径分为绝对路径和相对路径

绝对路径一般从盘符开始,一级一级向下找,不可越级

现在要求访问c盘下Python文件夹的python.txt文件:

f = open("C:\Python\python.txt", "r")

绝对路径一旦路径固定,文件迁移会很麻烦,所以在日常使用操作时我们都用相对路径

相对路径只需要访问文件与代码在一个目录中用 ./文件名称 直接写文件名称:

f = open("python.txt", "r")

注意的是,如果你是希望创建一个文件,r记得改成w,在目录中如果不存在这个文件是没法读的

如果访问的是该代码的上级目录,可以通过 ../ 访问上层路径

文件写入和关闭

write()写入内容

代码:

f.write("hello world")

效果图如下:

close()关闭文件

代码:

f.close()

当写入的内容出现中文乱码,使用encoding=‘utf-8’纠正格式

代码:

f = open("python.txt", "w", encoding="utf-8")
f.write("hello world")
f.close()

文件的读取

read(size)用于读取文件内容

代码:

f.read()
f.read(1024)

上一个是读取全部内容,下一个是读取1024字符长度文件内容,字母或数字

readlines()方法可以读取文本类型数据,按照行的方式一次性读取文件内容,返回的是一个列表

文件操作的mode模式

除了最基础的 r -- 只读;w -- 写入;a -- 追加
r+、w+、a+:代加号,功能全,既能读,又能写
rb、wb、ab:代b的字符,代表以二进制的形式对其进行操作,适合读取文本或二进制格式文件,如图片、音频、视频等格式
rb+、wb+、ab+:代加号,功能全,既能读,又能写(与+的区别于指针指向不同

文件备份的案例

要求输入当前目录下任意文件名,完成对该文件的备份功能

代码:

old_name = input('请输入要备份的文件名:')
index = old_name.rfind('.')

if index > 0:
    new_name = old_name[:index] + '[备份]' + old_name[index:]

    old_f = open(old_name, 'rb')
    new_f = open(new_name, 'wb')
    while True:
        data = old_f.read(1024)
        if len(data) == 0:
            break
        new_f.write(data)

    old_f.close()
    new_f.close()
else:
    print('请输入正确的文件名')

rfind()是通过寻找文件名的.作为下标,通过index判断文件是否有.,有才继续运行

len(data) == 0是判断读取文件内容是否完毕,读完再退出语句并写入新文件

效果图:

(3)文件夹的基本操作

Python中要进行文件夹操作需要用到os模块

import os

os.函数名

rename(旧文件名,新文件名) -- 对文件进行重命名

remove(要删除的文件名)  -- 对文件进行删除

import os

os.rename('python.txt', 'python1.txt')
os.remove('python[备份].txt')

效果如下:

相关操作

mkdir(新文件夹名称) -- 创建一个指定名称的文件夹

getcwd() -- 获取当前目录的名称

chdir(切换后的目录名称) -- 切换目录

listdir(目标目录) -- 获取指定目录下的文件信息,返回是一个列表

listdir(目标目录) -- 用于删除一个指定名称的空文件夹

删除操作(2)-- 注意慎用:

import shutil

shutil.rmtree('要删除的文件路径')

如果你删除的文件中内部包括很多文件夹,它会一级一级递归全部删掉然后才会删除文件夹本身

 四、Python异常

(1)什么是异常

异常是程序运行时检测到错误然后返回错误提示

举个例子:

f = open('python.txt', 'r')

运行台返回了

的错误信息,这就是异常,这是因为找不到python.txt文件导致的异常

(2)捕获异常并输出

常规捕获

基本语法:

try:
    可能会发生错误的代码
except:
    出现异常就执行的代码

举个例子:

try:
    f = open('python.txt', 'r')
except FileNotFoundError:
    print('文件不存在')

效果如下:

这样文件就不会报错了而是返回错误原因的信息

而很多错误我们不知道类型,所以通常用except Exception as e

try:
    f = open('python.txt', 'r')
except Exception as e:
    print(e)

效果如下:

通过了解错误信息重新改动代码,这比直接查看错误信息要简洁明了

常见异常类型

记住几个自己能够记住的,简单的足以

异常捕获的else语句

else语句就是当没有异常时才会执行的语句

try:
    print(1)
except Exception as e:
    print(e)
else:
    print("没有发现异常")

异常捕获的finally语句

finally是无论有无异常都会执行的代码

try:
    print(1)
except Exception as e:
    print(e)
else:
    print("没有发现异常")
finally:
    print("无论有没有异常, 这行代码都会执行")
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐