python文件处理
结构化数据类型
关系型数据库结构化存储
json、html等半结构化数据
图片音频数据等非结构化数据
Python处理csv文件
csv是一个被行分隔符、列分隔符划分成行和列的文本文件
行分隔符为\r\n,最后一行没有换行符
列分隔符通常为逗号或制表符
import csv
line1 = [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/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
'''
中括号里面的部分称为section
每个section内,都是keyvalue形成的键值对,key称为option选项
对于ini文件解析,python提供了专门的模块configparser
from configparser import ConfigParser
cfg = ConfigParser()
cfg.read('./my.cnf')
print(cfg.sections())
# 遍历获取sections
for section in cfg.sections():
    # 通过section获取options
    for k in cfg.options(section):
        print(section, k)
# 遍历获取sections
for section in cfg.sections():
    # 通过section获取options和values
    for 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))
# 判断是否存在指定options
print(cfg.has_option('test', 'server_name'))
# 检查是否存在test的section
if not cfg.has_section('test'):
    # 添加test section
    cfg.add_section('test')
# 在test中添加名称为port的options
cfg.set('test', 'port', '80')
cfg.set('test', 'port2', '8080')
# 删除指定options
cfg.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 json d = {'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)

                
            
        
浙公网安备 33010602011771号