结构化数据类型
关系型数据库结构化存储
json、html等半结构化数据
图片音频数据等非结构化数据
Python处理csv文件
csv是一个被行分隔符、列分隔符划分成行和列的文本文件
行分隔符为\r\n,最后一行没有换行符
列分隔符通常为逗号或制表符
import csvline1 = [1,"zhangsan",25]line2 = [2,"zhangsan",23]with open('./test.csv', 'w+', newline='') as csv_file:write = csv.writer(csv_file) # 创建csv对象write.writerow(line1) # 写入操作write.writerow(line2)
Python处理ini文件
ini文件,作为配置文件
'''[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socksymbolic-links=0[mysqld_safe]log-error=/var/log/mariadb/mariadb.logpid-file=/var/run/mariadb/mariadb.pid!includedir /etc/my.cnf.d'''
中括号里面的部分称为section
每个section内,都是keyvalue形成的键值对,key称为option选项
对于ini文件解析,python提供了专门的模块configparser
from configparser import ConfigParsercfg = ConfigParser()cfg.read('./my.cnf')print(cfg.sections())# 遍历获取sectionsfor section in cfg.sections():# 通过section获取optionsfor k in cfg.options(section):print(section, k)# 遍历获取sectionsfor section in cfg.sections():# 通过section获取options和valuesfor k, v in cfg.items(section):print(k, v)# 获取指定options的str值a = cfg.get('test', 'port')print(a, type(a))# 获取指定options的int类型值a = cfg.getint('test', 'port')print(a, type(a))# 判断是否存在指定optionsprint(cfg.has_option('test', 'server_name'))# 检查是否存在test的sectionif not cfg.has_section('test'):# 添加test sectioncfg.add_section('test')# 在test中添加名称为port的optionscfg.set('test', 'port', '80')cfg.set('test', 'port2', '8080')# 删除指定optionscfg.remove_option('test', 'port2')# 持久化至文件,所有针对ini的写入操作,都需要进行持久化操作with open('./my.cnf', 'w') as f:cfg.write(f)
序列化和反序列化
serialization 序列化
将内存中对象存储下来,变成一个个字节
desserialization 反序列化
将文件的一个个字节回复称内存中的对象
序列化保存到文件就是持久化,可以将数据序列化后持久化、网络传输
python处理Json文件
json的数据类型
双引号引起来的字符串,数值,true和false,null,对象,数组。Python中json模块 | Python类型 | json类型 | | —- | —- | | True | true | | False | false | | None | null | | str | string | | int | integer | | float | float | | list | array | | dict | object |
- 常用方法: | 指令 | 说明 | | —- | —- | | dumps | 序列化,json编码(字典转json) | | dump | 序列化,json编码并存入文件 | | loads | 反序列化,json解码(json转字典) | | load | 反序列化,json解码,从文件中读取数据 |
import jsond = {'a': 123, 'b': [1, 2, 3, {'c': 456}], 'd': True, 'e': None}print(d)print(json.dumps(d)){'a': 123, 'b': [1, 2, 3, {'c': 456}], 'd': True, 'e': None}{"a": 123, "b": [1, 2, 3, {"c": 456}], "d": true, "e": null}
一般json编码的数据很少落地,数据都是通过网络传输。
- messagePack:一个基于二进制高效的对象序列化类库,可以像json一样,在许多语言中交换结构对象,同时支持压缩
# 安装
pip install msgpack-python
# 使用方法
packb 序列化对象,提供了dumps来兼容
unpackb 反序列化对象,提供了loads来兼容
shutil模块
python提供了一个方便的高级文件操作的库
import shutil
# 文件对象的复制,fsrc直接调用read方法,fdst直接调用write方法,因此需要特别注意原文件指针和目标文件是够可写。length制定了buffer大小
copyfileobj(fsrc, fdst[, length])
In [4]: shutil.copyfileobj('sftp-password.txt', 'sftp-password1.txt')
# 复制文件内容,不包含元数据,src和dst为文件的路径字符串
copyfile(src, dst,* ,follow_symlinks=True)
In [4]: shutil.copyfile('sftp-password.txt', 'sftp-password1.txt')
# 仅仅复制权限,要求src和dst必须存在
copymode(src, dst,* ,follow_symlinks=True)
In [4]: shutil.copymode('sftp-password.txt', 'sftp-password1.txt')
# 复制文件元数据信息,包含权限,但不包含文件属主
copystat(src, dst,* ,follow_symlinks=True)
In [4]: shutil.copystat('sftp-password.txt', 'sftp-password1.txt')
# 复制文件内容、权限、部分元数据信息,不包括创建时间和修改时间
copy(src, dst,* ,follow_symlinks=True)
In [6]: shutil.copy('sftp-password.txt', 'test01.txt')
# 复制目录,src,dst必须为目录,src必须存在,dst必须不存在
copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)
# 删除文件,递归删除
rmtree(path, ignore_errors=False, onerror=None)
# 移动文件
move(src, dst, copy_function=copy2)
