文件路径模块pathlib
文件路径模块pathlib
文章目录
- 文件路径模块pathlib
- 1.概述
- 2.创建路径
- 2.1.创建非windos平台路径
- 2.2.动态拼接路径joinpath
- 2.3.替换文件名称 with_name
- 2.4.创建固定目录
- 2.5.创建文件夹和文件
- 1.创建多级目录mkdir
- 2.创建空文件
- 3.路径解析
- 3.1.根据路径分隔符解析路径parts
- 3.2.获取父级目录parent
- 3.3.获取路径最后一个部分name
- 4.目录内容
- 4.1.访问路径下所有文件iterdir
- 4.2.正则匹配文件glob
- 5.读写文件
- 6.文件类型
- 7.文件属性
- 7.1.stat获取文件属性
- 7.2.stat判断文件属性方法
- 8.权限
- 9.删除
- 9.1.删除空目录
- 9.2.删除目录文件
1.概述
前面介绍的os.path模块操作文件路径是基于字符串的底层操作,这篇文章介绍的pathlib模块也是处理文件路径,但是它比os.path模块操作更加方便。
pathlib模块提供了一个面向对象API接口来 解析、创建、测试和处理文件和路径。
2.创建路径
2.1.创建非windos平台路径
PurePath
:代表并不访问实际文件系统的“纯路径”,只负责对路径字符串执行操作,不会在磁盘上创建路径及文件。PurePath有两个子类,即PurePosixPath和PathWindowsPath,分别代表UNIX风格的路径和Windows风格的路径。
Path
:代表访问实际文件系统的“真正路径”。Path对象可用于判断对应的文件是否存在、是否为文件、是否为目录等。有两个子类,即PosixPath和WindowsPath。
import pathlib# PurePosixPath非windows平台,创建一个路径对象
usr = pathlib.PurePosixPath('/usr')
print(usr)# 拼接路径
usr_local = usr / 'local'
print(usr_local)usr_share = usr / pathlib.PurePosixPath('share')
print(usr_share)root = usr / '..'
print(root)etc = root / '/etc/'
print(etc)
运行结果
/usr
/usr/local
/usr/share
/usr/..
/etc
2.2.动态拼接路径joinpath
如果创建的路径是未知的,可以将各个路径作为参数使用joinpath拼接。
import pathlibroot = pathlib.PurePosixPath('/')
subdirs = ['usr', 'local']
usr_local = root.joinpath(*subdirs)
print(usr_local)
运行结果
/usr/local
2.3.替换文件名称 with_name
当给定一个包含文件的路径时,我们想替换这个路径的文件名称,如果使用分隔符操作虽然可以获取到文件名称进行替换,但是操作有些复杂,这里提供了一个函数能够直接替换文件名称,他们都是返回新对象,原对象保持不变。
- with_name函数用来替换路径中文件名
- with_suffix函数修改文件后缀
import pathlibind = pathlib.PurePosixPath('source/pathlib/index.rst')
print(ind)
# 替换文件名称
py = ind.with_name('pathlib_from_existing.py')
print(py)# 替换文件后缀
pyc = py.with_suffix('.pyc')
print(pyc)
运行结果
source/pathlib/index.rst
source/pathlib/pathlib_from_existing.py
source/pathlib/pathlib_from_existing.pyc
2.4.创建固定目录
当我们创建目录时候可以指定一个固定目录,然后在目录后拼接路径。省去了每次都要写一个绝对路径,path类为我们提供了常用的方法,例如home方法获取当前系统的家目录,cwd方法获取当前工作目录。
import pathlibhome = pathlib.Path.home()
print('home: ', home)cwd = pathlib.Path.cwd()
print('cwd : ', cwd)
运行结果
home: /Users/edy
cwd : /Users/edy/my_pathlib
2.5.创建文件夹和文件
1.创建多级目录mkdir
mkdir方法可以用来创建多级目录
- parents = True: 创建中间级父目录
- exist_ok= True: 目标目录存在时不报错
import pathlibp = pathlib.PurePosixPath('dir/abd')
pathlib.Path(p).mkdir(parents=True, exist_ok=True)
print(p)
2.创建空文件
touch方法用来创建一个空文件,前提是文件创建的路径必须存在,路径不存在则会报错。
from pathlib import Pathmyfile = Path('dir/myfile.txt')
myfile.touch(exist_ok=True)
3.路径解析
3.1.根据路径分隔符解析路径parts
parts属性可以生成根据路径分隔符解析得到的一个路径段序列,返回是一个元组,反应了路径实例的不可变性。
import pathlibp = pathlib.PurePosixPath('/usr/local/lib')
print(p.parts)
运行结果
('/', 'usr', 'local', 'lib')
3.2.获取父级目录parent
获取父级目录有两个属性
parent属性获取一次path路径的父级路径
parents属性返回一个迭代器,他可以不断的获取上级目录,直到文件系统的根目录。
import pathlibp = pathlib.PurePosixPath('/usr/local/lib')
# 获取父级目录
print('parent: {}'.format(p.parent))print('\nhierarchy:')
# 迭代获取父级目录直到系统文件根路径
for up in p.parents:print(up)
运行结果
parent: /usr/localhierarchy:
/usr/local
/usr
/
3.3.获取路径最后一个部分name
name属性获取路径的最后一个部分与os.path.basename函数生成的值相同。
suffix属性获取文件扩展名
stem属性获取不含后缀的文件名
import pathlibp = pathlib.PurePosixPath('./source/pathlib/pathlib_name.py')
print('path : {}'.format(p))
# 获取文件名称
print('name : {}'.format(p.name))
# 获取文件后缀
print('suffix: {}'.format(p.suffix))
# 获取文件名称不包含后缀
print('stem : {}'.format(p.stem))
运行结果
path : source/pathlib/pathlib_name.py
name : pathlib_name.py
suffix: .py
stem : pathlib_name
4.目录内容
path类提供了一些方法用来访问目录列表和发现文件系统中的文件名。
4.1.访问路径下所有文件iterdir
iterdir方法是一个生成器,会返回指定目录中所有内容。如果path不指定一个目录,则iterdir() 抛出 NotADirectoryError
import pathlibp = pathlib.Path('.')# 返回指定路径下所有的文件
for f in p.iterdir():print(f)
4.2.正则匹配文件glob
glob方法根据正则表达式匹配符合条件的文件
import pathlibp = pathlib.Path('.')# 匹配当前路径下my开头,py后缀的文件
for f in p.glob('my_*.py'):print(f)
运行结果
my_parsing_path.py
my_dir_path.py
rglob方法可以递归遍历文件
import pathlibp = pathlib.Path('..')for f in p.rglob('pathlib_*.py'):print(f)
5.读写文件
Path实例包含一些方法读写文件内容,例如read_bytes() or read_text()读取文件内容, use write_bytes() or write_text()写入文件。可以使用open方法打开文件并保留句柄操作文件。
import pathlib# 当前路径下创建文件
f = pathlib.Path('example.txt')f.write_bytes('This is the content'.encode('utf-8'))with f.open('r', encoding='utf-8') as handle:print('read from open(): {!r}'.format(handle.read()))print('read_text(): {!r}'.format(f.read_text('utf-8')))
运行结果
read from open(): 'This is the content'
read_text(): 'This is the content'
6.文件类型
Path类包含了一些方法判断文件的类型。
- is_file()判断是不是文件类型
- is_dir()判断是不是目录类型
- is_symlink()判断是不是软链接类型
- is_fifo()判断是不是队列
- is_block_device()判断是不是块设备
- is_char_device()判断是不是字符设备
7.文件属性
7.1.stat获取文件属性
stat()方法和lstat()方法获取文件属性,lstat方法用来检查可能是软连接的目标状态。这两个方法返回的结果与os.stat和os.lstat方法相同。
import pathlib
import sys
import timeif len(sys.argv) == 1:filename = __file__
else:filename = sys.argv[1]p = pathlib.Path(filename)
stat_info = p.stat()# 文件的绝对路径
print('{}:'.format(filename))
# 文件大小
print(' Size:', stat_info.st_size)
# 文件权限
print(' Permissions:', oct(stat_info.st_mode))
# 文件所有者
print(' Owner:', stat_info.st_uid)
# 文件所在块设备
print(' Device:', stat_info.st_dev)
# 文件创建时间
print(' Created :', time.ctime(stat_info.st_ctime))
# 文件最后修改时间
print(' Last modified:', time.ctime(stat_info.st_mtime))
# 文件最后方法时间
print(' Last accessed:', time.ctime(stat_info.st_atime))
运行结果
/Users/edy/file_propert.py:Size: 632Permissions: 0o100644Owner: 501Device: 16777220Created : Mon Feb 13 17:26:24 2023Last modified: Mon Feb 13 17:26:24 2023Last accessed: Mon Feb 13 17:26:24 2023
owner()和group()单独获取文件所有者个分组信息
import pathlibp = pathlib.Path(__file__)print('{} is owned by {}/{}'.format(p, p.owner(), p.group()))
运行结果
/Users/edy/file_propert.py is owned by edy/staff
7.2.stat判断文件属性方法
import os
import pathlib
import statroot = pathlib.Path('test_files')
mode = os.stat(root).st_mode
# 判断文件是否存在.
if root.exists():for f in root.iterdir():f.unlink()
else:root.mkdir()if stat.S_ISREG(mode): # 判断是否一般文件print('Regular file.')
elif stat.S_ISLNK(mode): # 判断是否链接文件print('Shortcut.')
elif stat.S_ISSOCK(mode): # 判断是否套接字文件print('Socket.')
elif stat.S_ISFIFO(mode): # 判断是否命名管道print('Named pipe.')
elif stat.S_ISBLK(mode): # 判断是否块设备print('Block special device.')
elif stat.S_ISCHR(mode): # 判断是否字符设置print('Character special device.')elif stat.S_ISDIR(mode): # 判断是否目录print('directory.')##额外的两个函数
stat.S_IMODE(mode) # 返回文件权限的chmod格式
print('chmod format.')stat.S_IFMT(mode) # 返回文件的类型
print('type of fiel.')
8.权限
stat除了获取文件权限,还支持设置文件权限。 下面是设置文件权限的属性列表。
stat.S_ISUID: Set user ID on execution. 不常用
stat.S_ISGID: Set group ID on execution. 不常用
stat.S_ENFMT: Record locking enforced. 不常用
stat.S_ISVTX: Save text image after execution. 在执行之后保存文字和图片
stat.S_IREAD: Read by owner. 对于拥有者读的权限
stat.S_IWRITE: Write by owner. 对于拥有者写的权限
stat.S_IEXEC: Execute by owner. 对于拥有者执行的权限
stat.S_IRWXU: Read, write, and execute by owner. 对于拥有者读写执行的权限
stat.S_IRUSR: Read by owner. 对于拥有者读的权限
stat.S_IWUSR: Write by owner. 对于拥有者写的权限
stat.S_IXUSR: Execute by owner. 对于拥有者执行的权限
stat.S_IRWXG: Read, write, and execute by group. 对于同组的人读写执行的权限
stat.S_IRGRP: Read by group. 对于同组读的权限
stat.S_IWGRP: Write by group. 对于同组写的权限
stat.S_IXGRP: Execute by group. 对于同组执行的权限
stat.S_IRWXO: Read, write, and execute by others. 对于其他组读写执行的权限
stat.S_IROTH: Read by others. 对于其他组读的权限
stat.S_IWOTH: Write by others. 对于其他组写的权限
stat.S_IXOTH: Execute by others. 对于其他组执行的权限
下面通过一个例子演示为文件设置权限
import stat
import pathlib
f = pathlib.Path('pathlib_chmod_example.txt')
if f.exists():f.unlink()
f.write_text('contents')
# stat.S_IMODE转为chmod模式,参数是获取当前文件的权限
existing_permissions = stat.S_IMODE(f.stat().st_mode)
print('文件原始权限: {:o}'.format(existing_permissions))new_permissions = stat.S_IRUSR
# 设置文件新的权限
f.chmod(new_permissions)
# 转换成chmod模式输出
after_permissions = stat.S_IMODE(f.stat().st_mode)
print('After: {:o}'.format(after_permissions))
运行结果
文件原始权限: 644
修改后的权限: 400
9.删除
9.1.删除空目录
删除一个空目录可以使用rmdir,如果删除一个不为空的目录会报错。删除的目录不存在也会报错。
import pathlibp = pathlib.Path('example_dir')print('Removing {}'.format(p))
p.rmdir()
9.2.删除目录文件
对于文件、符号链接、路径,可以使用unlink()删除
import pathlibp = pathlib.Path('touched')p.touch()print('exists before removing:', p.exists())p.unlink()
运行结果
exists before removing: True
exists after removing: False
相关文章:
文件路径模块pathlib
文件路径模块pathlib 文章目录文件路径模块pathlib1.概述2.创建路径2.1.创建非windos平台路径2.2.动态拼接路径joinpath2.3.替换文件名称 with_name2.4.创建固定目录2.5.创建文件夹和文件1.创建多级目录mkdir2.创建空文件3.路径解析3.1.根据路径分隔符解析路径parts3.2.获取父级…...
spring cloud篇——什么是服务熔断?服务降级?服务限流?spring cloud有什么优势?
文章目录一、spring cloud 有什么优势二、服务熔断2.1、雪崩效应2.2、DubboHystrixCommand三、服务降级四、服务限流4.1、限流算法4.2、应用级限流4.3、池化技术4.4、分布式限流4.5、基于Redis 功能的实现限流4.6、基于令牌桶算法的实现4.6.1 、Java实现一、spring cloud 有什么…...
Tomcat构建
软件架构C/S:Client/Server.需要安装才能使用。B/S:Brower/Server。有浏览器就可以。资源分类动态资源:每个用户访问相同的资源后,得到的结果可能不一样,称为动态资源。动态资源被访问后,先转换为静态资源,再被浏览器解…...
入门深度学习——基于全连接神经网络的手写数字识别案例(python代码实现)
入门深度学习——基于全连接神经网络的手写数字识别案例(python代码实现) 一、网络构建 1.1 问题导入 如图所示,数字五的图片作为输入,layer01层为输入层,layer02层为隐藏层,找出每列最大值对应索引为输…...
预算砍砍砍,IT运维如何降本增效
疫情短暂过去,一个乐观的共识正在蔓延:2023年的互联网,绝对不会比2022年更差。 “降本”是过去一年许多公司的核心策略,营销大幅缩水、亏损业务大量撤裁,以及层出不穷的裁员消息。而2023年在可预期的经济复苏下&#…...
10.Jenkins用tags的方式自动发布java应用
Jenkins用tags的方式自动发布java应用1.配置jenkins,告诉jenkins,jdk的安装目录,maven的安装目录2.构建一个maven项目指定构建参数,选择Git Paramete在源码管理中,填写我们git项目的地址,调用变量构建前执行…...
2023新华为OD机试题 - 相同数字的积木游戏 1(JavaScript)
相同数字的积木游戏 1 题目 小华和小薇一起通过玩积木游戏学习数学。 他们有很多积木,每个积木块上都有一个数字, 积木块上的数字可能相同。 小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同且所处位置最远的 2 块积木块,计算他们的距离。 小薇请你帮忙替她…...
重构之改善既有代码的设计(一)
1.1 何为重构,为何重构 第一个定义是名词形式: 重构(名词):对软件内部结构的一种调整,目的是在不改变「软件可察行为」前提下,提高其可理解性,降低修改成本。 「重构」的另一个用…...
Kotlin data class 数据类用法
实验数据 {"code":1,"message":"成功","data":{"name":"周杰轮","gender":1} }kotlin数据类使用方便提供如下内部Api: equals()/hashCode()对 toString() componentN()按声明顺序与属性相…...
随笔-老子不想牺牲了
18年来到这个项目组,当时只有8个人,包括经常不在的架构师和经理。当时的工位在西区1栋A座,办公桌很宽敞。随着项目的发展,入职的人越来越多,项目的工位也是几经搬迁。基本上每次搬迁时,我的工位都是挑剩下的…...
三种查找Windows10环境变量的方法
文章目录一.在设置中查看二. 在我的电脑中查看三. 在资源管理器里查看一.在设置中查看 在系统中搜索设置 打开设置,在设置功能里,点击第一项 系统 在系统功能里,左侧菜单找到关于 在关于的相关设置里可以看到高级系统设置 点击高级系…...
STM32单片机DS18B20测温程序源代码
OLED液晶屏电路接口DS18B20电路接口STM32单片机DS18B20测温程序源代码#include "sys.h"#define LED_RED PBout(12)#define LED_GREEN PBout(13)#define LED_YELLOW PBout(14)#define LED_BLUE PBout(15)#define DS18B20_IO_IN() {GPIOA->CRL&0XFFFFFFF0;GPIOA…...
java日志查看工具finder介绍
目录 一、finder介绍 二、单节点部署 1、服务器需要安装Tomcat,以2.82.16.35为例 2、进入Tomcat下目录webapps下,创建FIND目录,进入FIDN目录 3、下载findweb插件,解压缩 4、登录页面,配置 5、添加日志路径 三、…...
手写现代前端框架diff算法-前端面试进阶
前言 在前端工程上,日益复杂的今天,性能优化已经成为必不可少的环境。前端需要从每一个细节的问题去优化。那么如何更优,当然与他的如何怎么实现的有关。比如key为什么不能使用index呢?为什么不使用随机数呢?答案当然…...
【半监督医学图像分割 2022 MICCAI】CLLE 论文翻译
文章目录【半监督医学图像分割 2022 MICCAI】CLLE 论文翻译摘要1. 简介2. 方法2.1 半监督框架概述2.2 监督局部对比学习2.3 下采样和块划分3. 实验4. 结论【半监督医学图像分割 2022 MICCAI】CLLE 论文翻译 论文题目:Semi-supervised Contrastive Learning for Labe…...
vivo官网App模块化开发方案-ModularDevTool
作者:vivo 互联网客户端团队- Wang Zhenyu 本文主要讲述了Android客户端模块化开发的痛点及解决方案,详细讲解了方案的实现思路和具体实现方法。 说明:本工具基于vivo互联网客户端团队内部开源的编译管理工具开发。 一、背景 现在客户端的业…...
Python基础-数据类型之数字类型
变量中的变量值是用来存储事物状态的,事物的状态分成不同的种类(例如:人的姓名、年龄,身高、职位、工资等),因此变量值有多种不同的数据类型。 age 18 # 用整型记录年龄 salary 3.1 # 用浮点型记录…...
基于Web的6个完美3D图形WebGL库
现代前端、游戏和Web开发正是WebGL可以转化为数字杰作的东西。使用GPU绘制在浏览器屏幕上生成的矢量元素,WebGL创建交互式Web图形,从而获得用户体验。视觉元素的质量和复杂性使该工具在HTML或CSS等其他方法中脱颖而出。WebGL基础WebGL不是一个图形套件。…...
界面组件DevExpress Reporting v22.2 - 增强的Web报表组件UI
DevExpress Reporting是.NET Framework下功能完善的报表平台,它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。DevExpress Reporting v22.2版本已正式发布&…...
初学vector
目录 string的收尾 拷贝构造的现代写法: 浅拷贝: 拷贝构造的现代写法: swap函数: 内置类型有拷贝构造和赋值重载吗? 完善拷贝构造的现代写法: 赋值重载的现代写法: 更精简的现代写法&…...
Windows10 安装wsl2、Ubuntu相关操作
Windows10 安装wsl2、Ubuntu相关操作 安装wsl2 查看本机windows版本: 键盘上按下winr,输入winver,查看系统版本。必须运行 windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 windows 11。满足版本要求后…...
SpringBoot简单使用MongoDB
MongoDB介绍 SpringBoot简单使用MongoDB 一、配置步骤 1、application.yml 2、pom 3、entity 4、mapper 二、案例代码使用 1、库 前期准备上一篇安装MongoDB地址http://t.csdn.cn/G4oYJ 跟关系型数据库概念对比 Mysql MongoDB Database(数据库) Datab…...
Oracle Data Guard 角色转换(Role Transitions)
查询视图V$DATABASE的DATABASE_ROLE列可以看到数据库当前的角色。 1.角色转换介绍 Oracle Data Guard让你可以使用SQL语句或者通过Oracle Data Guard broker界面来动态更改数据库的角色,Oracle Data Guard支持以下的角色转换: 1࿰…...
opencv的TrackBar控件
大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…...
关于基线长度对双天线GNSS测姿精度的影响
文章目录一、GNSS测姿原理1. 载波相位双差求解基线向量2. GNSS姿态角表示二、基线长度对GNSS测姿精度的影响三、GNSS定向产品精度描述实例四、参考文献在GNSS定向模块或者板卡的指标参数中,我们一般会看到航向的测量精度和基线的长度相关。在实际使用,用…...
口交换机睿易 RG-NBS1826GC 24 口
接口形态不将就,标配光纤接口传输性能不将就,标配千兆上联口和大缓存设计端口数量不将就,8/16/24 三种选择楼宇对讲交换机不将就,保证开锁指令品质服务不将就,监控专用交换机接口形态不将就,标配光纤接口非…...
如何在Excel中向下拉列表中添加条件
在Excel中向下拉列表中添加条件 创建矩阵型数据集创建下拉列表创建第一个下拉列表创建第二个下拉列表你可以使用Microsoft Excel下拉列表来显示一个简单的列表,尽管有时需要更多的控制。假设你的人员分散在四个地区:北部、南部、东部和西部。你希望按地区与人员合作,而不是与…...
自定义bean 加载到spring IOC容器中
自定义bean加载到spring容器中的两种方式: 1.在类上添加注解Controller、RestController(本质是Controller)、Service、Repository、Component2.使用Configuration和Bean 这篇文章主要介绍第二种方式原理(因为在实际使用中&#…...
[python入门㊻] - python装饰器和类的装饰器
目录 ❤ python装饰器介绍 ❤ 什么是装饰器 ❤ 装饰器的流程 ❤ 定义装饰器时通常会涉及以下3个函数 无参装饰器 有参装饰器 多重装饰器 ❤ 装饰器的用法(闭包) ❤ 装饰器语法糖 ❤ 时间计时器 ❤ 装饰器中wraps作用 不使用wraps装饰器 使用wraps装饰器解…...
企业级信息系统开发学习1.1 初识Spring——采用Spring配置文件管理Bean
文章目录一、Spring容器演示——采用Spring配置文件管理Bean(一)创建Maven项目(二)添加Spring依赖(三)创建杀龙任务类(四)创建勇敢骑士类(五)采用传统方式让勇…...
win2003 iis做网站/广州seo工作
转载自:https://blog.csdn.net/kevin66654/article/details/71480319 原标题:2017广东红帽杯pwn1_writeup:简单ROP 先来正能量一波:作为一个一直没入门pwn的小菜鸟,这一段时间一直被学弟按在地上摩擦很不爽很不爽~~~~~…...
宠物店网站建设计划书/产品推广策划
大概一周前因为不可抗因素,我再次安装了Ubuntu16.04LTS 对于之前发誓不想再用Ubuntu的我,我只想说一句:真香 写一点我现在Ubuntu的配置,方面自己以后查看,也方便如果有相同需求的人使用 软件 网易云音乐: 官方1.1版本只能在命令行中用管理员身份打开,很麻烦,因此换成1.0版本 下…...
网站建设 客户要退款/最近的新闻大事10条
一、目录 二、源码: void CPtrListDlg::OnCheck() {// TODO: Add your control notification handler code hereUpdateData(true);//获取编辑框数据CAccount* m_pAccount new CAccount;//创建结构体对象指针switch(m_radio){case 0: //插入操作if(m_na…...
seo 合理的网站结构/百度推广收费多少
简介:大家好,我是枫哥,🌟一线互联网的IT民工、📝资深面试官、🌹Java跳蚤网课堂创始人。拥有多年一线研发经验,曾就职过科大讯飞、美团网、平安等公司。在上海有自己小伙伴组建的副业团队&#x…...
黄浦网站设计/网络营销公司哪家可靠
PoPo数据可视化 聚焦于Web数据可视化与可视化交互领域,发现可视化领域有意思的内容。不想错过可视化领域的精彩内容, 就快快关注我们吧 :) 本期可视化精彩视频请关注公众号浏览 全天智能获Pre-A轮千万融资 助力开启全天候实时大数据可视化模式 腾讯AI加速器二期项目…...
58同城有做网站/网络搜索关键词排名
背景本周研究了一下数据库中间件 MyCat ,并验证了 MyCat 单机 MySQL 主从复制 的部署方案,本文将整理 MyCat 单机的 Schema 的几种部署方案,并以 MyCat 单机 MySQL 主从复制的部署流程为主,详细介绍这一方案的部署过程。环境准备…...