模块(3)

1.os

  即操作指令

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

    这是我们学习的重点

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

  python是一门跨平台语言,由于每个平台路径规则不同

  需要一个模块来使得路径可以自动根据平台变化

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

import os

# print(os.getcwd()) # 当前工作目录
# os.chdir() # 修改当前工作目录
# print(os.curdir) # .代表当前
# print(os.pardir) # 代表上一级
# # 创建多级目录 不同平台路径分隔符不同
# os.makedirs('a/b/c')
# # 获取当前平台的路径分隔符
# print(os.sep)
# # 使用join拼接路径
# os.makedirs(os.sep.join(['a', 'b', 'c']))
# # 会先尝试在a/b这个路径 找到之后在这个里面创建c
# os.mkdir('a/b/c')
# # 目录不为空是无法删除 需要递归删除
# os.removedirs('a/b/c')
# 获取目录下的所有文件包括文件夹
li=os.listdir(r'F:\Python代码\14day')
print(li)
os.path.isfile(r'F:\Python代码\14day')#判断是否是文件
os.path.isdir()#判断是否是路径
os.rmdir()#删除,不能删除目录不是空的
os.stat()
# 获取文件大小
os.path.getsize()
#获取当前系统的文本换行符
os.linesep
# 分隔多个路径的分隔符
os.pathsep
# 获取当前系统
os.name
# 直接把执行结果输出到控制台
os.system('dir')
os.system('tasklist')
# 获取系统环境变量
os.environ

循环文件判断是否是文件夹或者文件
# 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.PATH
import os

# os.path.abspath()#返回绝对路径
# os.path.split()#把路径和最后的文件名文件夹名单独切出来
# os.path.dirname()#返回路径的上一级
# os.path.basename()#把路径的文件名文件夹名单独切出来
# os.path.exists()#判断路径是否存在
# os.path.isabs()#判断路径是否是绝对路径 原理是看第一个是不是路径分隔符
# os.path.join()#使用当前系统分隔符来拼接


# BASE_PATH=os.path.dirname(os.path.dirname(__file__))
# LOG_PATH=os.path.join(BASE_PATH,'day18','test.log')
# print(LOG_PATH)

t=os.path.getmtime(r'F:\Python代码\day20\os_mokuai.py')#最后修改时间
import time
print(time.localtime(t))
os.path.getatime()#最后访问时间

os.path.normcase()#规范目录 把斜杠改为当前系统的斜杠

os.path.normpath()#把斜杠改为当前系统的斜杠 并且解析..返回上一级

2.json

  在python中json是一个模块

  JSON

    JavaScript Object Nation js对象表示法

  json数据格式

      python中的格式      json格式

      字符           字符(必须是双引号)

      数字           数字

      字典           字典

      列表           数组

      元组           没有

      集合           没有

  使用json格式时要注意,最外层只能是一个数据,类型不限

  如果你要一次性存储多个数据需要使用容器字典或者数组

  序列化

    服务器端 需要根据前端的请求 从数据库获取数据 组织成前台可以识别的格式发给前台 

  反序列化

    客户端接收服务器返回的数据 并展示到屏幕上

    json数据本质就是字符串

    只要函数:

    序列化

      dump

      dumps

    反序列化

      load

      loads

    json最大的优势在于其跨平台的数据交换格式

    并且比xml非常轻量级

import  json
# 反序列化
# with open(r'F:\Python代码\day20\新闻.json',encoding='utf-8') as f:
# res=json.loads(f.read())
# print(res)
# 封装了文件的read
# with open(r'F:\Python代码\day20\新闻.json',encoding='utf-8') as f:
# res=json.load(f)
# print(res)


# li=["a","b","c",1]
# res=json.dumps(li)
# with open('new.json','wt',encoding='utf-8') as f:
# f.write(res)
# with open('new.json','wt',encoding='utf-8') as f:
# json.dump(li,f)
peson1={'name':'徐xx','age':22}
peson2={'name':'林xx','age':22}
peson3={'name':'张xx','age':22}
with open('new2.log','a',encoding='utf-8') as f:
json.dump(peson1,f)
json.dump(peson2,f)
json.dump(peson3,f)

3.shelve

  shelve也是一个序列化模块

  可以把它看作序列化的字典

import shelve
s=shelve.open('new.sev')
print(s)
# 存入数据
s['name']='sjh'
print(s)
# 取出数据

shelve.open('new.sev')
print(s['name'])
s=shelve.open('new.sev',writeback=True)

4.xml(配置文件)

  XML

  eXtensible Markup Language 可扩展标记语言

  xml也是一种文档结构,也是一种序列化方式

  与json不同的地方在于XML可以定义文档的结构 列如在页面中有页头叶尾等

  语法格式:

  使用标签来描述数据

  <tag></tag>

    通常由一对标签组成 开始标签和结束标签

</tag> 单标签 直接再名字后面将斜杠结束

  一个标签由三个部分组成
    1.标签名
    2.属性
<tag name="张xx" age="20"><tag>
属性名称为name 直接为xxx 注意值必须放在双引号中

3.文本内容
<persons>
<p name="a"><p>
<p name="b"><p>
</persons>
标签嵌套时 关闭的顺序与打开的顺序 相反
注意:最外层必须只有一个根标签

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

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

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

tree = ET.parse('test.xml')
# 解析某个文件
root=tree.getroot()
# 获取根标签
# 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("year")
# print(res)
# # 可以一级一级找
# res=root.find("country").find("year")
# print(res)

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

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

tree.write("test.xml")
# 创建
new_tag=ET.Element("我是新标签",attrib={"name":"sjh"})
new_tag.text="这是文本内容"
#
root.append(new_tag)
tree.write('test2.xml',encoding='utf-8')

猜你喜欢

转载自www.cnblogs.com/ShenJunHui6/p/10316393.html
今日推荐