持久化文件操作

文件的打开方式

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

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

用open的方式打开文件

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

文件对象的属性

在这里插入图片描述

  • 示例:在这里插入图片描述

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

  • 读:
    格式: f.read()

  • 写:
    格式:f.write()

  • 示例:在这里插入图片描述

  • 定位

    1. 显示指针当前所在位置
      格式:f.tell()
    2. 修改指针的位置
      格式: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 platform
os.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() 将转换后的格式写入到了文件中
  • 两种方法中都包含的参数:
    1. ensure_ascii=False: 中文存储需要设定
    2. 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('请输入正确的操作')

测试:在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值