os,json,shelve,xml模块及其相关

os 即操作系统
    在os中提供很多关于文件 , 文件夹 ,路径处理的函数

import  os
print(os.getcwd())

# 修改当前工作目录
os.chdir("test")
print(os.getcwd())

# .代表当前
print(os.curdir)
# # ..代表上一级
print(os.pardir)

# 创建多级目录 不同平台 路径分隔符不同 不建议直接写死
os.makedirs("a\\b\\c\\")

# 获取当前平台的路径分隔符
print(os.sep)
os.makedirs("e"+os.sep+"f")

# 使用join拼接路径
os.makedirs(os.sep.join(["a","b","c"]))

#  会先尝试查找a/b 这个路径  找到以后在里面创建c
os.mkdir("a/b/c")

# 目录不为空是 无法删除  需要递归删除
os.removedirs("a/b/c")

print(os.listdir(r"D:\x\a\b"))
#
dir = r"D:\x\a\b"

def show_file(path):
    li = os.listdir(path)
    for i in li:
        # 拼接完成路径
        print(path + "\\" + i)
        # 传入的参数都是路径
        # print(os.path.isfile(dir+"\\"+i)) # 判断是否是文件
        # print(os.path.isdir(dir + "\\" + i)) # 判断是否是路径
        # 如果是文件夹就继续递归
        if os.path.isdir(path + "\\" + i):
            show_file(path+"\\"+i)
show_file(dir)

os.rmdir(r"D:\x\a\b\ppp")

print(os.stat(r"D:\x\1.os模块.py"))

# 获取文件大小
# print(os.path.getsize(r"D:\x\1.os模块.py"))

# 获取当前系统的文本换行符
# print(os.linesep)

# 分隔多个路径的分隔符
# print(os.pathsep)

# print(os.name)

# 直接把执行结果输出到控制台
# os.system("tasklist")

os.path 是os模块下专门用于处理路径相关的

python是一门跨平语言,由于每个平台路径规则不同
需要一个模块来使得路径可以自动根据平台变化

path模块仅仅是对路径(字符串)进行操作 不会直接操作文件

 

import os
返回一个绝对路径
print(os.path.abspath("asasasasaxxxxxx"))

把路径和最后的文件名/文件夹名单独切出来
print(os.path.split(r"D:/6期视频/2/os/path模块/py/a/b/c"))
返回路径的上一级
print(os.path.dirname(r"D:/6期视频/2/os/path模块/py/a/b/c"))

把路径的最后的文件名/文件夹名单独切出来
print(os.path.basename(r"D:/6期视频/2/os/path模块/py/a/b/c"))

判断路径是否存在
print(os.path.exists(r"D:/6期视频"))

是否是绝对路径  原理是看第一个是不是路径分隔符
print(os.path.isabs("/2/os/path模块/py/a/b/c"))

使用当前操作系统的分隔符来拼接
print(os.path.join("a","b","c"))

文件的最后修改时间
t = os.path.getmtime(r"D:\6期视频\2.os.path模块.py")
t = os.path.getatime(r"D:\6期视频\2.os.path模块.py")
import time
print(time.localtime(t))

把斜杠改为当前系统的斜杠
print(os.path.normcase("a//b//c\\a\\aasas\\asa"))

把斜杠改为当前系统的斜杠 并且解析里面的..返回上一级
print(os.path.normpath("a/b/c/../d"))

在python 中 json是一个模块

JSON
JavaScript Object Nation js对象表示法
    JSON的发展
    当年的HTML独领风骚
    上网大多数情况下指的就是打开一个网页
    浏览器中运行的是js语言
    做后台服务器 必须保证你的数据是浏览器(js)能够看懂的
    js能看懂什么? 就是json
json数据类型与python数据类型的对应关系
    python中的格式     json格式
    字符                  字符  必须是双引号
    数字                  数字
    字典                  字典
    列表                  数组
    元组                  没有
    集合                  没有
使用json描述你的个人信息
    {
    'name':"xx",
    'age':15
    }
    注意:
    使用json格式时要注意,最外层只能是一个数据 类型不限
    如果你要一次性存储多个数据,需要使用容器 字典或数组

    序列化
    服务器端 需要根据前端的请求 从数据库获取数据 组织成前台可以识别的格式发给前台
    反序列化
    客户端 接收服务器返回的数据 并展示到屏幕上

    json数据本质就是字符串,

    主要函数:
    序列化
    dump
    dumps
    反序列化
    load
    loads

    json 最大的优势在于 其实跨平台的数据交换格式 ,
    并且对比XML 非常轻量级

import json
反序列化loads
with open("新闻.json",encoding="utf-8") as  f:
    res = json.loads(f.read())
    print(type(res))
load 封装了文件的read
with open("新闻.json",encoding="utf-8") as  f:
    res = json.load(f)
    print(type(res))

反序列化
li = ["a","b","c"]
with open("new2.json","wt",encoding="utf-8") as f:
    # 第一个参数 要序列化的数据
    # 第二个是文件对象
    json.dump(li,f)

"使用字典来保存你的前后左右同学的信息 然后用json序列化到文件中"
friends = [{"name":"xx","age":30},{"aname":"xx","age":18}]

with open("user.json","wt",encoding="utf-8") as f:
    json.dump(friends,f)

with open("user.json","rt",encoding="utf-8") as f:
    res = json.load(f)
    print(res)

shelve模块  也是一个序列化模块
可以把它看做是自带序列化的字典

import shelve

s = shelve.open("new.sve")

# 存入数据
s["name"] = "xx"
s["age"] = 20

print(s)

取出数据
s = shelve.open("new.sve")
print(s["name"],s["age"],s["sex"])

writeback
s = shelve.open("new.sve",writeback=True)
s["age"] =  2000
s["sex"] = "man"

XML
    是什么
    eXtensible Markup Language可扩展标记语言
    xml也是一种文档结构 ,也是一种序列化方式
    与json不同的地方在于 XML可以定义文档的结构 例如在页面中 有页头页尾等...
语法格式:
    使用标签来描述数据
    <tag></tag>
    通常由一对标签组成  开始标签和结束标签
    <tag/> 单标签 直接再名字后面加上斜杠结束

    一个标签由三个部分组成
        1.标签名
        2.属性
            <tag name="刘xx" age = "20"></tag>
            属性名称为name 值为刘xx  注意值必须放在双引号中
        3.文本内容
             <tag>这是文本内容</tag>
    标签可以嵌套
        <persons>
            <p name="a"></p>
            <p name="b"></p>
        </persons>
        标签嵌套时 关闭的顺序与打开的顺序 相反

    注意:最外层必须只有一个根标签

    <info name="self" age="18" sex="woman"/>

xml模块的使用
    xml模块的主要功能就是 解析xml  即序列化和反序列化

对于xml格式的数据 一般不会使用代码来生成 更多的是读取xml的文件内容

主要函数:
    iter
    find
    findall

import xml.etree.ElementTree as ET
# 解析某个文件
tree = ET.parse("test.xml")
# 获取根标签
root = tree.getroot()

print(root)
# tag 获取标签名字
print(root.tag)
获取文本
print(root.text)
获取属性 返回一个字典
print(root.attrib)

获取子标签(元素,节点)
iter 在全文范围查找所有名字匹配的
res = root.iter("country")

print(list(res))

res = root.iter("year")
for i in res:
    print(i.text)

find 当前标签的子标签 并且只返回第一个
res = root.find("country")
print(res)

# 可以一级一级往里找
res = root.find("country").find("year")
print(res)
# print(res.attrib["name"])

findall 当前标签的子标签 并且只返回所有匹配的
res = root.findall("country")
print(res[1].tag)

import xml.etree.ElementTree as ET

# ElementTree 文档树   用于读写文件
# Element  一个标签

# 解析某个文件
tree = ET.parse("test.xml")
# 获取根标签
root = tree.getroot()

#  name为新加坡的country改成shanghai

res = root.iter("country")
for i in  res:
    if i.attrib.get("name") == "Singapore":
        i.set("name","shanghai")

# 创建一个新标签
new_tag = ET.Element("我是新标签",attrib={"name":"abc"})
new_tag.text = "这是文本内容"

# 将新标签添加到根标签中
root.append(new_tag)

# 写入文件
tree.write("test2.xml",encoding="utf-8")

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值