Loading

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)
posted @ 2021-07-14 11:18  勤俭持家亮公子  阅读(73)  评论(0)    收藏  举报