【黑马程序员】Python文件、异常、模块、包

news2024/11/17 11:32:09

文章目录

  • 文件操作
    • 文件编码
      • 什么是编码
      • 为什么要使用编码
    • 文件的读取
      • open
      • model常用的三种基础访问模式
      • 读操作相关方法
    • 文件的写入
      • 注意
      • 代码示例
  • 异常
    • 定义
    • 异常捕获
      • 捕获指定异常
      • 捕获多个异常
      • 捕获所有异常
      • 异常else
      • 异常finally
    • 异常的传递
  • python 模块
    • 定义
    • 模块的导入
      • import模块名
      • from 模块名 import 功能名
      • 使用*导入time的sleep功能
      • 使用as给特定功能加上别名
    • 自定义模块
      • 创建自定义模块举例
      • `__name__` 变量
      • `__all__` 变量
      • 注意
  • Python包
    • 自定义包
      • 定义
      • 创建包
      • 导入包
        • 使用import导入
        • 使用from import导入
        • 导入模块中
    • 安装第三方包
      • 常见第三方包
      • 安装第三方包
  • 综合练习
    • 需求
    • 实现

文件操作

文件编码

什么是编码

  • 编码就是一种规则集合,记录了内容和二进制间进行互相转换的规则

  • 最常用的是UTF-8编码

为什么要使用编码

  • 计算机内部保存的都是0和1,所以需要将内容全部转换为0和1才能识别

  • 读取时需要将计算机中保存的0和1转为内容

文件的读取

open

  • 语法
open(name, mode, encoding)
name    要打开的目标文件名的字符串
mode    打开文件的模式:只读、写入、追加
encoding    编码格式,推荐使用UTF8

model常用的三种基础访问模式

在这里插入图片描述

读操作相关方法

  • read方法
文件对象.read(num)
num    表示要从文件中读取的数据长度,单位是字节,如果没有传,读取文件中所有的数据
  • readlines():可以按照行的方式把整个文件的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素

  • readline()读取文件的一行

  • for循环读取文件行

  • close()关闭文件对象

  • with open语法:用于打开文件并在使用完毕后自动关闭文件

在这里插入图片描述

  • 代码示例
# *_*coding:utf-8 *_*
# 打开文件
f = open("./read_file.py", 'r', encoding="UTF-8")
# 读取文件
print(f'读取50个字节的结果{f.read(50)}')
# 在程序中多次调用read,下一次会从上一次读的偏移结尾继续读
print(f'读取全部字节的结果{f.read()}')

# readlines读取文件的全部行,封装到列表中
print(f'读取文件的全部行{f.readlines()}')

# readline一次读取文件一行
line1 = f.readline()
line2 = f.readline()
line3 = f.readline()
print(f'第一行数据是:{line1}')
print(f'第二行数据是:{line2}')
print(f'第三行数据是:{line3}')

# 关闭文件
f.close()

# for循环读取文件行
for line in open("./read_file.py", "r"):
    print(line)

# with open语法
with open("./read_file.py", "r", encoding="UTF-8") as f:
    print(f'{f.readlines()}')

文件的写入

注意

  • 直接调用write方法,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区

  • 当调用flush的时候,内容会真正写入文件

  • 目的:避免频繁磁盘操作,导致效率下降

  • close方法内置了flush功能

  • w模式

    • 文件不存在则创建

    • 文件存在则清空

  • a模式

    • 文件不存在则创建

    • 文件存在则追加尾部写

代码示例

# *_*coding:utf-8 *_*

# open打开文件,使用覆盖写操作
f = open("test.txt", "w", encoding="UTF-8")
# write写入
f.write("123456789")
# flush刷新
f.flush()
# 关闭文件
f.close()

# open打开文件,使用追加写操作
f = open("test1.txt", "a", encoding="UTF-8")
# write写入
f.write("123456789")
# flush刷新
f.flush()
# 关闭文件
f.close()

异常

定义

  • 当检测到一个错误时,Python解释器就无法继续运行了,反而出现一些错误的提示,这就是所谓的异常

异常捕获

  • 作用:提前假设某处会出现异常,做好提前准备,当真的出现异常时,可以有后续手段

  • 基本语法

try:
    可能发生异常的代码块
except:
    出现异常后的代码块
  • 代码示例:打开一个不存在的文件
try:
    f = open("xxx.txt", 'r')
except:
    print("open file err")

捕获指定异常

  • 注意:

    • 如果尝试执行的代码的异常类型和捕获的异常类型不一致,则无法捕获异常

    • 一般try下面只放一行尝试执行的代码

  • 语法:

try:
    print(name)
except NameError as e:
    print('name变量名称未定义错误')
  • 代码示例
try:
    print(name)
# as e是给NameError类型起别名
except NameError as e:
    print('name变量未定义错误')

捕获多个异常

  • 代码示例
# 捕获多个异常
try:
    print(name)
# as e是给NameError类型起别名,e中记录了异常的具体信息
except (NameError, ZeroDivisionError) as e:
    print('name变量未定义错误或者除0异常')

捕获所有异常

  • 代码示例
# 捕获所有异常
try:
    print(name)
# 方式一:通过捕获Exception异常,Exception是顶级异常
except Exception as e:
    print('name变量未定义错误')

try:
    print(name)
# 方式二:不指定具体的异常直接捕获
except:
    print('name变量未定义错误')

异常else

  • else表示的是如果没有异常要执行的代码

  • 代码示例

# 异常else
try:
    print(name)
# as e是给NameError类型起别名,e中记录了异常的具体信息
except (NameError, ZeroDivisionError) as e:
    print('name变量未定义错误或者除0异常')
else:
    print("未发生异常")

异常finally

  • finally表示的是无论是否异常都要执行的代码

  • 代码示例

# 异常finally
try:
    print(name)
# as e是给NameError类型起别名,e中记录了异常的具体信息
except (NameError, ZeroDivisionError) as e:
    print('name变量未定义错误或者除0异常')
else:
    print("未发生异常")
finally:
    print("总会执行我")

异常的传递

  • 异常是具有传递性的

  • 内层的异常如果没有被捕获会沿着调用链一直向上抛直到main函数

  • 代码示例

# *_*coding:utf-8 *_*

def func1():
    print("func1 start")
    1 / 0
    print("func1 end")

def func2():
    print("func2 start")
    func1()
    print("func2 end")

def main():
    try:
        func2()
    except Exception as e:
        print(e)

main()

python 模块

定义

  • Python模块是一个Python文件,以.py结尾,模块能定义类、函数和变量,模块里面也能包含可执行的代码

  • 作用:模块就是一个工具包

模块的导入

  • 模块在使用之前需要先导入

  • 语法

[from 模块名] import [模块||变量|函数|*] [as 别名]
  • 常用组合方式
import 模块名
from 模块名 import 类、变量、方法等
from 模块名 import *
import 模块名 as 别名
from 模块名 import 功能名 as 别名

import模块名

  • 基本语法
import 模块名
import 模块名1,模块名2
  • 代码示例
# 导入时间模块
import time

print("satrt")
# 程序睡眠3s
time.sleep(3)
print("end")

from 模块名 import 功能名

  • 代码示例
from time import sleep

print("satrt")
# 程序睡眠3s
sleep(3)
print("end")

使用*导入time的sleep功能

  • 代码示例
from time import *

print("satrt")
# 程序睡眠3s
sleep(3)
print("end")

使用as给特定功能加上别名

  • 代码示例
import time as t

print("satrt")
# 程序睡眠3s
t.sleep(3)
print("end")

自定义模块

创建自定义模块举例

  • 创建my_module.py
def test(a, b):
    print(a + b)
  • 创建test_my_module.py
import my_module

my_module.test(1, 2)

__name__ 变量

  • 在当前模块中执行时,才会生效,外部导入时不会执行

  • 代码示例

def test(a, b):
    print(a + b)


if __name__ == '__main__':
    test(1, 1)

__all__ 变量

  • 如果一个模块中有__all__变量,当使用from xxx import *,时只能导入这个列表中的元素,没有all时默认导入的是所有,有all时只导入all中的

  • 创建my_module.py

__all__ = ['test1']

def test(a, b):
    print(a + b)

def test1(a, b):
    print(a + b)
  • 创建test_my_module.py
from my_module import *

test1(1, 1)
# NameError: name 'test' is not defined
# test(1, 1)

注意

  • 不同模块,同名的功能,如果都被导入,那么后导入的会覆盖先导入的

Python包

自定义包

定义

  • 从物理上看,包就是一个文件夹,在该文件夹下包含了一个__init__.py文件,该文件夹可用于包含多个模块文件

  • 从逻辑上看,包的本质依然是模块

创建包

  • 右键New->Python Package->输入包名

  • 编写对应模块文件

    • 新建my_module1.py
    # *_*coding:utf-8 *_*
    def info_print1():
        print('my_module1')
    
    • 新建my_module2.py
    # *_*coding:utf-8 *_*
    
    def info_print2():
        print('my_module2')
    

导入包

使用import导入
  • my_package同级创建一个test_my_package.py文件
# *_*coding:utf-8 *_*
import my_package.my_module1
import my_package.my_module2

# 包中的my_module1模块的info_print方法
my_package.my_module1.info_print1()
# 包中的my_module2模块的info_print方法
my_package.my_module2.info_print2()
使用from import导入
from my_package import my_module1
from my_package import my_module2

my_module1.info_print1()
my_module2.info_print2()
导入模块中
from my_package.my_module1 import info_print1
from my_package.my_module2 import info_print2

info_print1()
info_print2()

安装第三方包

常见第三方包

在这里插入图片描述

安装第三方包

  • 命令:pip install 包名

  • 示例

在这里插入图片描述

综合练习

需求

在这里插入图片描述

实现

  • 新建my_utils包

  • 新建str_utils.py文件

# *_*coding:utf-8 *_*

def str_reverse(s):
    reversed(s)
    return s

def substr(s, x, y):
    return s[x:y]

  • 新建file_utils.py文件
# *_*coding:utf-8 *_*

def print_file_info(file_name):
    try:
        f = open(file_name, "r", encoding='UTF-8')
    except Exception as e:
        print(e)
    finally:
        f.close()

def append_to_file(file_name, data):
    f1 = open(file_name, 'a', encoding='UTF-8')
    f1.write(data)
    f1.close()
  • 测试:在my_utils同级新建test_my_utils.py
# *_*coding:utf-8 *_*

from my_utils import str_util
from my_utils import file_util

print(f'反转后的结果是:{str_util.str_reverse("abc")}')
print(f'取子串后后的结果是:{str_util.substr("123456789", 2, 7)}')

file_util.print_file_info("aa.txt")
file_util.append_to_file("aa.txt", "这是一条追加内容")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1517045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux - 安装 nacos(详细教程)

目录 一、简介二、安装前准备三、下载与安装四、基本配置五、单机模式 一、简介 官网:https://nacos.io/ GitHub:https://github.com/alibaba/nacos Nacos 是阿里巴巴推出的一个新开源项目,它主要是一个更易于构建云原生应用的动态服务发现…

单目测距+姿态识别+yolov8界面+车辆行人跟踪计数

yolov5单目测距速度测量目标跟踪(算法介绍和代码) 1.单目测距实现方法 在目标检测的基础上,我们可以通过计算物体在图像中的像素大小来估计其距离。具体方法是,首先确定某个物体的实际尺寸,然后根据该物体在图像中的像…

CVE-2022-1310:RegExp[@@replace] missing write barrier lead a UAF

文章目录 环境搭建漏洞分析漏洞利用漏洞触发链RCE原语构造 总结参考 环境搭建 嗯,这里不知道是不是环境搭建的有问题,笔者最后成功的实现了任意地址读写,但是任意读写的存在限制,任意写 wasm 的 RWX 区域时会直接报错&#xff0c…

安卓通过termux部署ChatGLM

一、安装Termux并进行相关配置 1、安装termux Termux 是一个 Android 终端仿真应用程序,用于在 Android 手机上搭建一个完整的 Linux 环境。 不需要 root 权限 Termux 就可以正常运行。Termux 基本实现 Linux 下的许多基本操作。可以使用 Termux 安装 python&…

【Python数据结构与判断7/7】数据结构小结

目录 序言 整体回忆 定义方式 访问元素 访问单个元素 访问多个与元素 修改元素 添加元素 列表里添加元素 字典里添加元素 删除元素 in运算符 实战案例 总结 序言 今天将对前面学过的三种数据结构:元组(tuple)、列表(…

什么是制作视频内容?如何搞好视频内容制作?

写在前面 视频内容已成为希望吸引数字观众的企业、品牌和创作者的必备资产。事实上,根据NogenTech的一份报告,在2023年,91%的营销部门使用了这种动态内容。 视频内容创作和优化性能的技巧和窍门的增加绝非巧合。TikTok以及Instagram Reels和…

天地图全国幼儿园数据下载与处理分析

概述 在看天地图服务资源的时候看到有个“幼儿园”的数据,好奇点开看了下,下载下来数据差看了下,数据质量还不错。本篇文章给大家分享一下这个数据的处理以及一些简单的统计分析结果。 数据下载 通过地址https://service.tianditu.gov.cn/…

谷歌网络营销要做什么?

想做谷歌网络营销,广告是不能跳过的一环,花钱买广告位是最最实在的方法了,别人一搜相关的东西,你的产品或者服务就能跳出来,这样感兴趣的用户就会点进去,可以说是最实用的方法,唯一需要考虑的毫…

嵌入式常用5种通信协议

简介: 嵌入式常用五种通信协议为:UART、RS232、RS485、IIC、SPI。 由于这几种通信协议十分相似又有区别,所以分组记忆,红色的为一组,蓝色的为一组。 ①组都有两条线,且都是异步通信没得时钟线&#xff0c…

RuoYi开源项目1-下载并实现运行RuoYi项目

下载并实现运行RuoYi项目 环境需要下载项目项目配置后端项目配置前端项目配置 启动后前端登录页面截图 环境需要 JDK > 8MySQL >5.7Maven > 3.0Node > 12Redis > 3 下图是我的环境配置 下载项目 若依官网 1.进入官网,下载版本如下图RuoYi-Vue前后…

【pyautogui】PyAutoGUI 的简单使用

文章目录 1 简介2 通用功能2.1 暂停/休眠/耗时2.2 自动防故障功能 3 鼠标控制3.1 移动鼠标3.2 获取鼠标指针位置3.3 点击鼠标3.4 拖动鼠标3.5 滚动鼠标3.6 常用方法 4 键盘控制4.1 输入字符串 write4.2 按键操作 press4.3 按下 & 释放4.4 组合键 hotkey4.5 键名 5 屏幕图像…

VC-旅游系统-213-(代码+说明)

转载地址: http://www.3q2008.com/soft/search.asp?keyword旅游系统 旅游信息管理系统开题报告 一、研究目的 旅游信息管理系统能帮助旅行社在游客的市场开拓、游客的信息管理、客户服务等方面进行综合处理。使旅行社能够准确的掌握客户的市场动态,充分了解对客户…

【endnote】advanced science

今天投稿advanced science时,用endnote改格式,一大堆问题 发现标准引用格式如下,显示所有作者,不显示titile等 首先,上网下载了advanced science的格式ens,然后导入到endnote 发现不对,于是乎调…

【Python】科研代码学习:十二 PEFT(高效参数的训练,Adapter适配器)

【Python】科研代码学习:十二 PEFT PEFT简单训练教程简单推理教程Adapter 适配器Merge Adapter 架构关系 PEFT 【HF官网-Doc-PEFT:API】 首先日常问题,是什么,为什么,怎么用 PEFT (Prameter-Efficient Fine-Tuning)&a…

如何在数据库中存储小数:FLOAT、DECIMAL还是BIGINT?

前言 这里还是用前面的例子: 在线机票订票系统的数据表设计。此时已经完成了大部分字段的设计,可能如下: CREATE TABLE flights ( flight_id INT AUTO_INCREMENT PRIMARY KEY, flight_number VARCHAR(10), departure_airport_code VARCHAR(3), arrival_air…

HAProxy——高性能负载均衡器

目录 一.常见的Web集群调度器 二.HAProxy基本介绍 1.HAProxy是什么? 2.HAProxy的特性 3.HAProxy常用的8种负载均衡调度算法 3.1 轮询:RR(Round Robin) 3.2 最小连接数:LC(Least Connections&#xff…

【TB作品】MSP430单片机,音乐播放器,四首音乐,八音盒,Proteus仿真

文章目录 题目要求仿真结果实验报告:基于MSP430单片机的八音盒设计实验目的实验设备实验原理总结 代码和仿真图 题目要求 八音盒 本设计利用MSP430单片机结合内部定时器及LED/LCD,设计一个八音盒,按下单键可以演奏预先设置的歌曲旋律。 基本要求: 使用LED/LCD显示器…

分销商城小程序开发可以为商家带来哪些好处

分销小程序的开发帮助商家更多地维系客户,市场竞争越来越激烈,各大商家争抢流量,拼命获客,小程序分销堪比商家的营销神器。 分销商城小程序是指商家通过小程序分销与分销商建立利润分享合作伙伴关系,允许分销商将参与小…

C语言例3-11:使用算术运算符的例子。

代码如下: int main(void) {int a12, b10;float c2.0, d0.5;double e6.5, f13.0;printf("-a %d\n",-a);printf("ab %d\n",ab);printf("a-b %d\n",a-b);printf("a*b %d\n",a*b);printf("a/b %d\n"…

第 7 场 小白入门赛

第5题 &#xff1a;兽之泪【算法赛】 AC_Code:C #include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <queue> #include<stack> #include<cmath> #include <unordered_set> #include &…