Bootstrap

解锁数据交互与文件操作的密钥:精通JSON与OS模块

学习这两个模块前先引入一个方法

open()打开文件,用一段代码展示对于open的理解。并附带一个用代码形式拷贝图片的方式。

# open:打开文件 f = open(file)
# close:关闭文件
# readable() writeable() 判断读写,返回bool值  f.readable()/f.writeable()
# read():读取文件所有内容,返回字符串
# mode r:只读,没有会报错 r+:文件不存在则报错
#     w:只写,文件存在内容则覆盖
#     a+: 追加内容
#     用于对图片数据的读取和写入
#     wb:写入二进制
#     rb:读取二进制
# with open('file', 'r') as f: 打开文件并存放再 f 中,不用写close取关闭文件
# 'r',对于打开文件的处理方式

# 把图片复制到自己创建的一个新文件中(图片复制)
f = open('../heads/1黑暗之女.jpg', mode="rb")  # 以二进制方式读取文件
f1 = f.read()   # 图片读取输出位二进制格式
# print(f1)
f2 = open('黑暗之女.jpg', mode='wb')    # 以二进制方式写入文件
f2.write(f1)
f2.close()
f.close()

JSON模块

Python中的json模块提供了一种非常简单的方式来编码和解码JSON数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON是独立于语言的,很多编程语言都提供了对JSON的支持(包括Python)。

使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数:

  • json.dumps(): 对数据进行编码。
  • json.loads(): 对数据进行解码。

导入json模块

import json

编码为JSON,解码JSON

此格式下的编码和解码为了举例分开进行的,所以把前面的注释了,可以把代码解除注释自行使用。

# 每种语言都能识别的json模块,一种轻量级的数据交换格式
# 两种操作,格式化和序列化
# 序列化:将python中的对象 编码成一个json格式的字符串
# 反序列化:将Json格式的字符串 解码成python对象
# dumps(obj) 需要先格式化,再写入文件(只有一个参数) dump(obj, file) 直接把数据格式化写入文件(有两个参数,能同时完成)
# loads(obj) 先读取文件中的字符串参数,再解码 load(file) 直接把文件中格式化的字符串拿出来解码(一个参数完成两步)
# 导入json包
import json

# 数据对象
data = {
    'user': [{'username': 'admin', 'psd': '12345'}],
    'student': [{'id': 11, 'name': 'json', 'age': 22}],
}

# 格式化(有两种方式)
# # dumps方式
# data1 = json.dumps(data)    # 把data数据格式化,存放到data1中
# with open('./json.txt', 'w') as f:
#     f.write(data1)    # 打开这个文件并把json格式的data1写入文件中,
#     print(data1)      # 如果没有就创建此文件并写入

# # dump方式
# with open('./json1.txt', 'w') as f1:  # 不要忘记了'w'
#     json.dump(data, f1)  # 直接把要格式化的文件放入dump中,
#     print(json.dump(data, f1))  # 并存放在f1中写入当前路径'./json1.txt'文件下

# 序列化
# loads方式
# json_str = json.dumps(data)  # 把格式化后的字符串放入json_str
with open('./json.txt', 'rb') as f:
    data0 = f.read()    # 读取刚才格式化的json字符串
    # 把格式化的数据解码并打印出来<class 'dict'>,以字典形式存放
    print(json.loads(data0), type(json.loads(data0)))

# load方式
with open('./json1.txt', 'r') as f1:
    # 直接读取刚格式化的字符串文件,并解码以字典形式输出
    print(json.load(f1))

 OS模块

导入os模块

import os

常见的方法

import os
# 常见的一些模块中的内置方法

# OS为python的一个内置模块
print(os)

# 当前文件路径
print(os.curdir)  # .

# 父级路径
print(os.pardir)  # ..

# 创建文件(需要指明创建文件的路径)
os.mkdir('D:\\2407')   # 在D盘下创建一个名为2407的文件夹

# 删除空文件
os.rmdir('D:\\2407')   # 把D盘下的文件夹2407删除(有内容不能删除)

# 更改路径(改变当前工作目录到指定的路径)
print(os.chdir('d:'))  # 把当前工作文件路径更改到指定的路径

# 查看当前文件路径下的文件信息,或指定路径下的文件
print(os.listdir())

# 当前文件路径绝对路径
print(os.path.abspath(os.curdir))  # D:\python2407\python基础语法\2

# 或取当前文件
print(__file__)  # D:\python2407\python基础语法\2\11.os.py

# 当前文件路径的父路径
print(os.path.dirname(__file__))  # D:\python2407\python基础语法\2

# 文件路径是否存在(用\作为转义字符)
print(os.path.exists('D:\\python2407\\python基础语法\\2'))  # True

# 是否为文件(文件夹会返回False,每一个\都要打)
print(os.path.isfile('D:\\python2407\\python基础语法\\2\\11.os.py'))  # True

# 分割路径(分割最后一部分和前一部分)
print(os.path.split('D:python2407\\python基础语法\\2\\11.os.py'))  # ('D:\\python2407\\python基础语法\\2', '11.os.py')

# 将多个路径组合成一个路径(磁盘下第一个文件夹不打印)
print(os.path.join('D:', 'python2407', 'python基础语法', '2', '11.os.py'))  # D:python2407\python基础语法\2\11.os.py

# 获取当前电脑cup核心数
print(os.cpu_count())   # 4

拓展方法

它里面还有很多内置方法,大家感兴趣可以看看,了解一下。来源菜鸟:https://www.runoob.com/

序号方法及描述
1

os.access(path, mode)


检验权限模式
2

os.chdir(path)icon-default.png?t=N7T8https://www.runoob.com/python3/python3-os-chdir.html


改变当前工作目录
3

os.chflags(path, flags)


设置路径的标记为数字标记。
4

os.chmod(path, mode)


更改权限
5

os.chown(path, uid, gid)


更改文件所有者
6

os.chroot(path)


改变当前进程的根目录
7

os.close(fd)


关闭文件描述符 fd
8

os.closerange(fd_low, fd_high)


关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略
9

os.dup(fd)


复制文件描述符 fd
10

os.dup2(fd, fd2)


将一个文件描述符 fd 复制到另一个 fd2
11

os.fchdir(fd)


通过文件描述符改变当前工作目录
12

os.fchmod(fd, mode)


改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。
13

os.fchown(fd, uid, gid)


修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定。
14

os.fdatasync(fd)


强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息。
15

os.fdopen(fd[, mode[, bufsize]])


通过文件描述符 fd 创建一个文件对象,并返回这个文件对象
16

os.fpathconf(fd, name)


返回一个打开的文件的系统配置信息。name为检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在很多标准中指定(POSIX.1, Unix 95, Unix 98, 和其它)。
17

os.fstat(fd)


返回文件描述符fd的状态,像stat()。
18

os.fstatvfs(fd)


返回包含文件描述符fd的文件的文件系统的信息,Python 3.3 相等于 statvfs()。
19

os.fsync(fd)


强制将文件描述符为fd的文件写入硬盘。
20

os.ftruncate(fd, length)


裁剪文件描述符fd对应的文件, 所以它最大不能超过文件大小。
21

os.getcwd()


返回当前工作目录
22

os.getcwdb()


返回一个当前工作目录的Unicode对象
23

os.isatty(fd)


如果文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true, 否则False。
24

os.lchflags(path, flags)


设置路径的标记为数字标记,类似 chflags(),但是没有软链接
25

os.lchmod(path, mode)


修改连接文件权限
26

os.lchown(path, uid, gid)


更改文件所有者,类似 chown,但是不追踪链接。
27

os.link(src, dst)


创建硬链接,名为参数 dst,指向参数 src
28

os.listdir(path)


返回path指定的文件夹包含的文件或文件夹的名字的列表。
29

os.lseek(fd, pos, how)


设置文件描述符 fd当前位置为pos, how方式修改: SEEK_SET 或者 0 设置从文件开始的计算的pos; SEEK_CUR或者 1 则从当前位置计算; os.SEEK_END或者2则从文件尾部开始. 在unix,Windows中有效
30

os.lstat(path)


像stat(),但是没有软链接
31

os.major(device)


从原始的设备号中提取设备major号码 (使用stat中的st_dev或者st_rdev field)。
32

os.makedev(major, minor)


以major和minor设备号组成一个原始设备号
33

os.makedirs(path[, mode])


递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。
34

os.minor(device)


从原始的设备号中提取设备minor号码 (使用stat中的st_dev或者st_rdev field )。
35

os.mkdir(path[, mode])


以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。
36

os.mkfifo(path[, mode])


创建命名管道,mode 为数字,默认为 0666 (八进制)
37

os.mknod(filename[, mode=0600, device])
创建一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。

38

os.open(file, flags[, mode])


打开一个文件,并且设置需要的打开选项,mode参数是可选的
39

os.openpty()


打开一个新的伪终端对。返回 pty 和 tty的文件描述符。
40

os.pathconf(path, name)


返回相关文件的系统配置信息。
41

os.pipe()


创建一个管道. 返回一对文件描述符(r, w) 分别为读和写
42

os.popen(command[, mode[, bufsize]])


从一个 command 打开一个管道
43

os.read(fd, n)


从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。
44

os.readlink(path)


返回软链接所指向的文件
45

os.remove(path)


删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。
46

os.removedirs(path)


递归删除目录。
47

os.rename(src, dst)


重命名文件或目录,从 src 到 dst
48

os.renames(old, new)


递归地对目录进行更名,也可以对文件进行更名。
49

os.rmdir(path)


删除path指定的空目录,如果目录非空,则抛出一个OSError异常。
50

os.stat(path)


获取path指定的路径的信息,功能等同于C API中的stat()系统调用。
51

os.stat_float_times([newvalue])
决定stat_result是否以float对象显示时间戳

52

os.statvfs(path)


获取指定路径的文件系统统计信息
53

os.symlink(src, dst)


创建一个软链接
54

os.tcgetpgrp(fd)


返回与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组
55

os.tcsetpgrp(fd, pg)


设置与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组为pg。
56

os.ttyname(fd)


返回一个字符串,它表示与文件描述符fd 关联的终端设备。如果fd 没有与终端设备关联,则引发一个异常。
57

os.unlink(path)


删除文件路径
58

os.utime(path, times)


返回指定的path文件的访问和修改的时间。
59

os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]])


输出在文件夹中的文件名通过在树中游走,向上或者向下。
60

os.write(fd, str)


写入字符串到文件描述符 fd中. 返回实际写入的字符串长度
61

os.path 模块icon-default.png?t=N7T8https://www.runoob.com/python3/python3-os-path.html


获取文件的属性信息。
62

os.pardir()icon-default.png?t=N7T8https://www.runoob.com/python3/python3-os-pardir.html


获取当前目录的父目录,以字符串形式显示目录名。
63

os.replace()icon-default.png?t=N7T8https://www.runoob.com/python3/python3-os-replace.html


重命名文件或目录。
;