结构化数据类型

关系型数据库结构化存储
json、html等半结构化数据
图片音频数据等非结构化数据

Python处理csv文件

csv是一个被行分隔符、列分隔符划分成行和列的文本文件
行分隔符为\r\n,最后一行没有换行符
列分隔符通常为逗号或制表符

  1. import csv
  2. line1 = [1,"zhangsan",25]
  3. line2 = [2,"zhangsan",23]
  4. with open('./test.csv', 'w+', newline='') as csv_file:
  5. write = csv.writer(csv_file) # 创建csv对象
  6. write.writerow(line1) # 写入操作
  7. write.writerow(line2)

Python处理ini文件

ini文件,作为配置文件

  1. '''
  2. [mysqld]
  3. datadir=/var/lib/mysql
  4. socket=/var/lib/mysql/mysql.sock
  5. symbolic-links=0
  6. [mysqld_safe]
  7. log-error=/var/log/mariadb/mariadb.log
  8. pid-file=/var/run/mariadb/mariadb.pid
  9. !includedir /etc/my.cnf.d
  10. '''

中括号里面的部分称为section
每个section内,都是keyvalue形成的键值对,key称为option选项
对于ini文件解析,python提供了专门的模块configparser

  1. from configparser import ConfigParser
  2. cfg = ConfigParser()
  3. cfg.read('./my.cnf')
  4. print(cfg.sections())
  5. # 遍历获取sections
  6. for section in cfg.sections():
  7. # 通过section获取options
  8. for k in cfg.options(section):
  9. print(section, k)
  10. # 遍历获取sections
  11. for section in cfg.sections():
  12. # 通过section获取options和values
  13. for k, v in cfg.items(section):
  14. print(k, v)
  15. # 获取指定options的str值
  16. a = cfg.get('test', 'port')
  17. print(a, type(a))
  18. # 获取指定options的int类型值
  19. a = cfg.getint('test', 'port')
  20. print(a, type(a))
  21. # 判断是否存在指定options
  22. print(cfg.has_option('test', 'server_name'))
  23. # 检查是否存在test的section
  24. if not cfg.has_section('test'):
  25. # 添加test section
  26. cfg.add_section('test')
  27. # 在test中添加名称为port的options
  28. cfg.set('test', 'port', '80')
  29. cfg.set('test', 'port2', '8080')
  30. # 删除指定options
  31. cfg.remove_option('test', 'port2')
  32. # 持久化至文件,所有针对ini的写入操作,都需要进行持久化操作
  33. with open('./my.cnf', 'w') as f:
  34. 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解码,从文件中读取数据 |
  1. import json
  2. d = {'a': 123, 'b': [1, 2, 3, {'c': 456}], 'd': True, 'e': None}
  3. print(d)
  4. print(json.dumps(d))
  5. {'a': 123, 'b': [1, 2, 3, {'c': 456}], 'd': True, 'e': None}
  6. {"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)