文件的打开方式
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 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()
将转换后的格式写入到了文件中- 两种方法中都包含的参数:
- 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('请输入正确的操作')
测试: