持久化文件操作

    科技2022-08-28  99

    文件的打开方式

    python对于文件都采用默认的操作步骤:打开——操作——关闭,对文件进行操作之后一定要关闭它,关闭文件将对文件释放控制权使文件恢复存储状态,此时另一个进程可以操作这个文件。 文件的常见打开方式:

    方式意义r只读打开w只写打开(如果文件不存在,则会创建改文件;文件存在,则会清空该文件的内容)rb用于打开一些二进制文件,比如:图片或者视频a用于对该文件添加内容+通常和w或者a一起使用,表示读写打开改文件

    用open的方式打开文件

    打开格式:f = open('文件名',’打开方式‘) 关闭格式:f.close()

    文件对象的属性

    示例:

    对文件对象的读,写和定位

    读: 格式: f.read()

    写: 格式:f.write()

    示例:

    定位

    显示指针当前所在位置 格式:f.tell()修改指针的位置 格式:f.seek(offset, from) offset: 指的偏移量,一般为0 from: 0:代表是移动指针到文章开头;1:代表当前位置; 2: 代表移动指针到文章末尾

    示例:

    对于文件的关闭

    方法一:调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:方法二:Python引入了with语句来自动帮我们调用close()方法: 示例:

    os模块

    os模块的常用命令

    os模块作用os.name查看当前的操作系统 (Windows: nt, Linux:posix)os.uname查看当前操作系统的详细信息,如果在windows中运行,则需要import platformos.mkdir()创建目录os.makedir()可以创建多层目录,等价于(mkdir -p )os .rmdir()删除目录os.mknod()创建文件(windows中不支持)os.rename()对文件重命名os.remove()删除文件os.path.exists()判断文件是否存在,返回True是存在,False表示不存在os.path.splitext()分离文件名和后缀名os.path.split()分离目录名和文件名()os.path.getsize()查看文件的大小os.path.abspath()显示改文件的绝对路径 示例

    json 模块

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

    Python数据类型和Json数据类型互相转换规则

    注:Python 中的集合不能转成Json数据类型

    Python和Json互相转换需要的指令

    Python转换成Json

    json.dumps() 只是将python格式转换成了json格式json.dump() 将转换后的格式写入到了文件中两种方法中都包含的参数: ensure_ascii=False: 中文存储需要设定indent=4: 增加缩进,增强可读性,但缩进空格会使数据变大 示例:

    json 格式转换成python

    json.load() 示例:

    文件操作的实例练习

    读取一个文件,显示除了以井号(#)开头的行以外的所有行。

    代码:

    with open('hello.txt', 'r', encoding='utf-8') as f: print('文件内容:\n', f.read()) f.seek(0, 0) for i in f: if not i.startswith('#'): print('文件中不以#开头的内容:', i)

    测试:

    学生管理系统(文件版)

    1). 必须使用自定义函数,完成对程序的模块化 2). 学生信息至少包含:姓名、年龄、学号,除此以外可以适当添加 3). 必须完成的功能:添加、删除、修改、查询、退出 代码:

    import json import os import pprint def rewrite(x, filename='学生信息文件'): with open(filename, mode='w') as file: json.dump(x, file, indent=4, ensure_ascii=False) while True: act = input('请输入你想完成的操作(添加|删除|更改|查看|退出):') if os.path.exists('学生信息文件'): if os.path.getsize('学生信息文件') != 0: with open('学生信息文件', mode='r') as f: d = json.load(f) else: d = {} else: d = {} if act == '添加': number = input('学号:') if number not in d.keys(): name = input('学生姓名:') age = int(input('年龄:')) d.update({number: {'姓名': name, '年龄': age}}) rewrite(d) print('学号为%s的学生信息添加成功' % number) else: print('学号为%s的学生信息在文件中已经存在' % number) elif act == '删除': number = input('输入你想要删除的学生学号:') if number in d.keys(): d.pop(number) rewrite(d) print('学号为%s的学生信息已经被删除' % number) else: print('学号为%s的学生信息不存在' % number) elif act == '更改': number = input('请输入你要修改的学生学号:') if number in d.keys(): kind = input('请输入你要修改学号为%s的什么信息(姓名|年龄):' % number) content = input('修改%s为:' % kind) d[number].update({kind: content}) rewrite(d) print('学号为%s的学生信息已经被更改' % number) else: print('学号为%s的学生信息不存在' % number) elif act == '查看': pprint.pprint(d) elif act == '退出': break else: print('请输入正确的操作')

    测试:

    Processed: 0.008, SQL: 9