Python语法回答5:文件+进程+异常+枚举

文件

处理文件的基本操作有哪些步骤

  1. 打开文件
  2. 文件处理(如读写)
  3. 关闭文件

文件读写的常用函数是什么

  • file.read()
  • file.readline()
  • file.readlines()

  • file.write()
  • file.writelines()

文件读写的常用模式有哪些

  • w
  • w+
  • wb
  • wb+
  • r
  • r+
  • rb
  • rb+
  • a
  • a+

with语句文件操作的语法是什么

with open(path, mode, encoding) as file:

复制文本文件或图片的基本操作是什么

  1. 打开图片
  2. 读取图片
  3. 图片写入
"""
打开源文件、目标文件
读取源文件,写入目标文件
关闭源文件、目标文件
"""
# 复制文本文件
# file = open('data.txt', 'a+', encoding='utf-8')
# # 0表示把指针放到文本最前面
# file.seek(0)
# msg = file.read()
# file.close()# file = open('data.txt', 'r', encoding='utf-8')
# msg = file.read()
# file.close()
#
# file = open('data_bak.txt', "w", encoding='utf-8')
# file.write(msg)
# file.close()# 复制图片
with open('imgs/train/snower.jpg', 'rb') as oriFile:oriPic = oriFile.read()with open('imgs/val/snower_bak.jpg', 'wb') as cyFile:cyFile.write(oriPic)

os模块常用文件操作有哪些

  1. 获取目录下的文件或文件夹
  2. 判断是目录还是文件
  3. 判断文件是否存在
  4. 创建文件
  5. 拼接路径
  6. 删除文件,不支持删除目录
  7. 重命名文件
import os# 获取目录下的文件或文件夹
# print(os.listdir('./t123'))
# ['snower.jpg', 'snower_bak.jpg']# print(os.listdir('../day08'))
# ['02-模块导入.py', '03-文件写入.py', '04-文件读取.py', '05-模式.py',
# '06-注册+登录用户.py', '07-复制文件.py', '08-os模块.py', 'data.txt',
# 'data_bak.txt', 't123', 'sort.py', 'user.txt', '__pycache__']# 判断是目录还是文件
# print(os.path.isdir('./t123'))
# True
# print(os.path.isfile('./sort.py'))
# True# 判断文件是否存在
# print(os.path.exists('./t123/val'))
# False
# if not os.path.exists('./t123/val'):
#     # 创建
#     os.mkdir('./t123/val')
# print(os.path.exists('../../test.py'))
# True# 拼接路径
# print(os.path.join('t123', 'val'))
# t123\val
# print(os.path.join('t123', 'val', 'data.txt'))
# t123\val\data.txt# 删除文件,不支持删除目录
# os.remove('./t123/snower_bak.jpg')
# os.remove('./t123/val')
# PermissionError: [WinError 5] 拒绝访问。: './t123/val'# 重命名
# os.rename('./t123/train/snower.jpg', './t123/train/snow.jpg')
# os.rename('./t123/train/snow.jpg', './t123/train/snower.jpg')

json文件读写操作

python object --> json str

  • json.dumps(file)

json str --> python object

  • json.loads(file)
"""
JSON语法
数据使用key:value形式表示
大括号表示对象
{"name": "Anna","age": 18,"hobbies": ['摄影', '阅读']
}中括号表示多个
[{"name": "Anna","age": 18,"hobbies": ['摄影', '阅读']},{"name": "Emma","age": 19,"hobbies": ['敲代码', '阅读']}
]转码解码
python object --> jsonjson.dumps()
json --> python objectjson.loads()"""
import jsondic = {"name": "张三","age": 19
}# 文件写入
# file = open('name.txt', 'a', encoding='utf-8')
# # python对象转为json字符串
# dic_json = json.dumps(dic)
# file.write(dic_json + '\n')
# file.close()
# {"name": "Anna", "age": 18}
# {"name": "\u5f20\u4e09", "age": 19}# 文件读取
file = open('name.txt', 'r', encoding='utf-8')
lines = file.readlines()
for line in lines:# json字符串转为python对象dic = json.loads(line)print(dic['name'], dic['age'])
file.close()
# Anna 18
# 张三 19

yaml文件读写操作

python object --> yaml str

  • yaml.safe_dump(dic, file)

yaml str --> python object

  • yaml.safe_load(file)
import yaml# 读取yaml文件
# with open('./test.yaml', 'r', encoding='utf-8') as file:
#     dic = yaml.safe_load(file)
#     print(dic)
# {'name': 'Anna', 'age': 19, 'hobbies': ['摄影', '阅读']}# 写入yaml文件
dic = {'name': 'Emma','age': 18,'hobbies': ['敲代码', '阅读']
}
with open('test2.yaml', 'w', encoding='utf-8') as file:yaml.safe_dump(dic, file)# age: 18# hobbies:# - "\u6572\u4EE3\u7801"# - "\u9605\u8BFB"
# name: Emma

进程

进程与线程的关系是什么

  • 每个进程之间相互独立
  • 线程是操作系统运行最小单位,进程中所有任务都是线程在执行
  • 线程在任务执行过程是串行
  • 一个进程可以开启多个线程,所有线程并行执行不同任务
  • 程序启动后,默认开启一个线程,成为主线程MainThread

自定义线程类的语法是什么

继承threading.Thread

  1. 改写run函数
  2. 启动线程:start函数调用
"""
开启线程
线程执行任务(功能):函数创建线程 (线程也是对象)开启线程自定义线程类
"""
import threadingclass MyThread(threading.Thread):def __init__(self):super().__init__()def task(self, *args):name = threading.current_thread().nameprint(threading.current_thread())print(f'{name}正在执行任务 参数是:{args}')def run(self):print(f'run方法被执行 {threading.current_thread()}')self.task('Anna', 18)passif __name__ == '__main__':# 创建线程th = MyThread()# th.task('Anna', 18)th.start()# run方法被执行 <MyThread(Thread-1, started 12236)># <MyThread(Thread-1, started 12236)>
# Thread-1正在执行任务 参数是:('Anna', 18)

多线程安全问题为何会出现

多个线程共享数据

多线程安全问题如何解决

lock 锁门操作

  • lock.acquire()
  • lock.release()
"""
卖票案例
多线程共享数据:出现线程安全问题,本质是多个线程对共享数据进行了修改
"""
import threading
import timeticket = 100
lock = threading.Lock()class MyThread(threading.Thread):def __init__(self):super().__init__()def sale_ticket(self):global ticket# 底层汇编语言执行步骤# 第一步:获得票数 100# 第二步:数据进行-1# 第三步:减去的数据进行赋值# 获取锁lock.acquire()if ticket < 1:lock.release()return Falseticket -= 1# 模拟延时time.sleep(0.01)# 释放锁lock.release()name = threading.current_thread().nameprint(f'{name}卖了1张票,还剩下{ticket}张')return ticket > 0def run(self):while self.sale_ticket():passif __name__ == '__main__':for i in range(3):# 创建线程th = MyThread()th.name = f'th{i}'# 启动线程th.start()

异常

什么是异常

无法正确运行的代码,编译器会出现红色报错提示,这个错误提示即是异常

"""
异常
"""
print('start')
# ZeroDivisionError: division by zero
# ZeroDivisionError --> ArithmeticError --> Exception --> BaseException --> object
print(2 / 0)
print('end')

如何处理异常

  • try:
    • 写容易报错的代码
  • except 报错类型:
    • 代码报错时,except写处理的代码
    • 报错类型写法
      • 具体错误类型
      • 多个错误类型组成的元组
      • Exception
  • finally:
    • 无论try、except代码是否被执行,finally代码都会被执行
    • 一般编写释放资源的代码
"""
异常捕获
try:try写容易报错的代码
except 报错类型:代码报错时,except写处理的代码
finally:无论try except代码是否被执行,finally代码都会被执行报错类型写法具体错误类型多个错误类型组成的元组Exception"""
print('start')
file = None
# ZeroDivisionError: division by zero
# ZeroDivisionError --> ArithmeticError --> Exception --> BaseException --> object
try:# num = 2 / 0# print(name)file = open('data.txt', 'r', encoding='utf-8')# 很多代码# 模拟异常num = 2 / 0
# except ZeroDivisionError:
#     print('ZeroDivisionError')
#     pass
# except NameError:
#     print('NameError')
#     pass
# except (NameError, ZeroDivisionError) as e:
#     print(f'NameError {e}')
# NameError name 'name' is not defined
except Exception as e:print(f'Exception {e}')
finally:print('执行了finally')print('关闭文件')if file:file.close()passprint('end')

自定义异常类

"""
自定义异常
"""class AngryError(Exception):def __init__(self, msg):super(AngryError, self).__init__(msg)if __name__ == '__main__':try:print('no moive')raise AngryError('so angry')except AngryError as e:# print(e)print(f'{type(e).__name__}: {e}')# no moive
# AngryError: so angry

枚举

枚举元素的特点是什么

  1. 元素不允许重复、不允许被外部修改变量值
  2. 元素使用类名.变量名调用
"""
枚举
元素不允许重复、不允许被外部修改变量值
元素使用类名.变量名调用
"""
from enum import IntEnum, Enum# class Transpose(IntEnum):
#     FLIP_LEFT_RIGHT = 0
#     FLIP_TOP_BOTTOM = 1
#     ROTATE_90 = 2
#     ROTATE_180 = 3
#     ROTATE_270 = 4
#     TRANSPOSE = 5
#     TRANSVERSE = 6
#
#
# print(Transpose.FLIP_TOP_BOTTOM.name)
# # FLIP_TOP_BOTTOM
# print(Transpose.FLIP_TOP_BOTTOM.value)
# # 1
# print(Transpose.FLIP_TOP_BOTTOM == 1)
# # Trueclass ImageType(Enum):TRAIN_TYPE = 'train'TEST_TYPE = 'test'print(ImageType.TRAIN_TYPE.name)
# TRAIN_TYPE
print(ImageType.TRAIN_TYPE.value)
# train

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

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

相关文章

【Bug】.net6 cap总线+rabbitmq延时消息收不到

文章目录 问题问题代码原因解决处理Bug的具体步骤 问题 我有两个服务一个叫05一个叫15 然后用的cap总线rabbitmq 05消息队列发了一条延时消息&#xff0c;到时间了05服务的订阅者能收到 15服务订阅同一个消息的没收到(cap的cashboard)&#xff08;手动requeue05和15都能收到&a…

Redis学习指南(18)-Redis的AOF持久化介绍

Redis是一种高性能的开源键值存储系统&#xff0c;通过将数据存储在内存中以提供快速读写访问。然而&#xff0c;由于内存有限&#xff0c;如果Redis服务器意外崩溃或断电&#xff0c;所有数据将会丢失。为了解决这个问题&#xff0c;Redis提供了一种称为AOF&#xff08;Append…

Apache安全及优化

配置第一台虚拟机 VM1网卡 yum仓库 挂载磁盘 上传3个软件包到/目录 到/目录下进行解压缩 tar xf apr-1.6.2.tar.gz tar xf apr-util-1.6.0.tar.gz tar -xjf httpd-2.4.29.tar.bz2 mv apr-1.6.2 httpd-2.4.29/srclib/apr mv apr-util-1.6…

【Redis】基于Token单点登录

基于Token单点登录 获取验证码 流程图 #mermaid-svg-DLGHgCofEYXVSmI5 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-DLGHgCofEYXVSmI5 .error-icon{fill:#552222;}#mermaid-svg-DLGHgCofEYXVSmI5 .error-text{f…

Spring Boot 单体应用升级 Spring Cloud 微服务

作者&#xff1a;刘军 Spring Cloud 是在 Spring Boot 之上构建的一套微服务生态体系&#xff0c;包括服务发现、配置中心、限流降级、分布式事务、异步消息等&#xff0c;因此通过增加依赖、注解等简单的四步即可完成 Spring Boot 应用到 Spring Cloud 升级。 *Spring Cloud …

【Docker】Linux中使用Docker安装Nginx部署前后端分离项目应用

目录 一、概述 1. Nginx介绍 2. Nginx优势 3. Nginx的工作原理 二、容器创建 1. Mysql容器 2. Tomcat容器 3. Nginx容器 每篇一获 一、概述 1. Nginx介绍 Nginx&#xff08;发音为 "engine x"&#xff09;是一个开源的、高性能的 HTTP 服务器和反向代理服务…

[二]rtmp服务器搭建

[二]rtmp服务器搭建 一.测试二.使用Nginx搭建自己的rtmp服务器1.nginx是什么&#xff1f;2.环境准备 三、搭建过程1.安装编译 nginx 所需要的库2.下载 nginx-1.21.6.tar.gz3.下载 nginx-rtmp-module 4.解压5.编译6.启动nginx&#xff0c;检测nginx是否能成功运行7.配置nginx使用…

OpenCV-Python(47):支持向量机

原理 线性数据分割 如下图所示&#xff0c;其中含有两类数据&#xff0c;红的和蓝的。如果是使用kNN算法&#xff0c;对于一个测试数据我们要测量它到每一个样本的距离&#xff0c;从而根据最近的邻居分类。测量所有的距离需要足够的时间&#xff0c;并且需要大量的内存存储训…

关于OC中变量相关知识点

众所周知&#xff0c;变量是用来存储数据的 围绕着变量&#xff0c;有很多知识点&#xff0c;总结归纳一下 变量的类型变量的作用区域局部变量全局变量静态变量变量的访问范围属性成员变量实例变量synthesizedynamic… 变量的类型 变量大致分为两大类型&#xff1a; 基本数据…

uni-app小程序 uni.showToast字数超过两行自动省略显示不全问题

在实际开发过程中如果用户提交某些文件时&#xff0c;如果缺少某些条件我们要提醒用户缺少那些条件才能提交&#xff0c;但是如果我们用uni.showToast提醒的次数超过7个字的时候就会导致文字显示不全&#xff0c;达不到提醒的效果&#xff0c;这种时候我们就需要使用uni.showMo…

vue中合并下载打包视频图片

async is_downFile(list) {if (list.length > 0) {const config {downloadList: list,suffix: "打包后文件名称.zip",};// downloadStatus 成功后状态可自行加业务const { downloadStatus } await attachDownload(config);return { downloadStatus };}}// fileD…

文心一言使用分享

ChatGPT 和文心一言哪个更好用&#xff1f; 一个直接可以用&#xff0c;一个还需要借助一些工具&#xff0c;还有可能账号会消失…… 没有可比性。 通用大模型用于特定功能的时候需要一些引导技巧。 import math import time def calculate_coordinate(c, d, e, f, g, h,…

springcloud +Vue 前后端分离的onlinejudge在线评测系统

功能描述&#xff1a; 本系统的研究内容主要是设计并实现一个一个在线测评系统&#xff08;OJ&#xff09;&#xff0c;该系统集成了博客、竞赛、刷题、教学&#xff0c;公告&#xff0c;个人管理六大功能&#xff0c;用户注册后登录系统&#xff0c;可以浏览本站的全部文章、发…

linux上面hadoop配置集群

要在Linux上配置Hadoop集群&#xff0c;需要按照以下步骤进行操作&#xff1a; 安装Java Development Kit (JDK)&#xff1a;首先&#xff0c;确保您的Linux系统上已经安装了JDK。可以通过运行以下命令来检查是否已经安装了JDK&#xff1a; java -version如果返回了Java的版本信…

【JVM】并发的可达性分析详细解释

​ &#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JVM ⛳️ 功不唐捐&#xff0c;玉汝于成 ​ 目录 前言 正文 可达性分析的基本原理&#xff1a; 根集合&#xff08;Root Set&#xff09;&#xff1a; 对象引用关系&#xff1a; 标记…

PyCharm 快捷键(Ctrl + R)正则表达式批量替换

目录 一、使用快捷键CtrlR&#xff0c;打开替换界面 二、输入替换格式 三、点击全部替换 一、使用快捷键CtrlR&#xff0c;打开替换界面 二、输入替换格式 在第一个框输入 (.*): (.*) 第二个框输入 $1:$2, 三、点击全部替换

spring boot学习第八篇:kafka监听消费

为了实现监听器功能 pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoc…

论文阅读:Vary论文阅读笔记

目录 引言整体结构图数据集构造Vary-tiny部分Document Data数据构造Chart Data构造Negative natural image选取 Vary-base部分 引言 论文&#xff1a;Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models Paper | Github | Demo 许久不精读论文了&#x…

Spring Boot 优雅实现统一数据返回格式+统一异常处理+统一日志处理

在我们的项目开发中&#xff0c;我们都会对数据返回格式进行统一的处理&#xff0c;这样可以方便前端人员取数据&#xff0c;当然除了正常流程的数据返回格式需要统一以外&#xff0c;我们也需要对异常的情况进行统一的处理&#xff0c;以及项目必备的日志。 1. 统一返回格式 …

linux 安装ffmpeg

一、下载 ffmpeg-4.3.1 下载地址&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1xbkpHDfIWSCbHFGJJHSQcA 提取码&#xff1a;3eil 二、上传到服务器root目录下 三、给ffmpeg-4.3.1 读写权限 chmod -R 777 /root/ffmpeg-4.3.1 四、创建软连接 1.进入/bin 目录 2.…