一、python下的文件操作基础知识
**1.读写文件的步骤:
(1)打开文件,或者新建一个文件 --> 读/写数据 -->关闭文件
(2)打开文件,或者新建一个文件:(open,默认模式是r,也可以认为是mode=‘r’)
在python中,使用open函数,可以打开一个已经存在的文件,或者新建一个新文件。
open(文件名 访问模式)
其中open 后面跟的文件名/文件路径一般都是字符串。
open的作用类似于vim命令(文件存在——打开;文件不存在——新建)。
2.文件的常见打开方式:
方式 | 意义 |
---|---|
r | 只读的方式打开 |
w | 只写的方式打开(如果文件不存在,则会创建改文件;文件存在,则会清空该文件的内容) |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头,这是默认模式。例如:图片或视频 |
a | 用于文件内追加内容,如果文件已存在,文件指针将会放在文件的末尾,也就是说,新的内容将会被写入到已有内容之后,如果该文件不存在,则新建文件进行写入 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
3. File对象的属性
一个文件被打开后,会得到一个file对象,你可以得到有关该文件的各种信息。
属性 | 描述 |
---|---|
file.closed | 返回true如果文件已被关闭,否则返回false。 |
file.mode | 返回被打开文件的访问模式。 |
file.name | 返回文件的名称。 |
file.softspace | 如果用print输出后,必须跟一个空格符,则返回false。否则返回true。 |
举例:
二、文件对象的读、写和定位
读:
格式: f.read()
写:
格式:f.write()
定位:
1.显示指针当前所在位置
格式:f.tell()
2. 修改指针的位置
格式:f.seek(offset, from)
offset: 指的偏移量,一般为0
from: 0:代表是移动指针到文章开头;1:代表当前位置; 2: 代表移动指针到文章末尾
举例:
三、对于文件的关闭和拷贝
1.关闭
方法一:调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:
方法二:Python引入了with语句来自动帮我们调用close()方法:
举例:
2.拷贝
四、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() 显示改文件的绝对路径
举例:
1.打印当前系统信息
2. os模块
五、json 模块
- JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
2.Python数据类型和Json数据类型互相转换规则
注:Python 中的集合不能转成Json数据类型
3.Python和Json互相转换需要的指令
3.1Python转换成Json
json.dumps() 只是将python格式转换成了json格式
json.dump() 将转换后的格式写入到了文件中
两种方法中都包含的参数:
ensure_ascii=False: 中文存储需要设定
indent=4: 增加缩进,增强可读性,但缩进空格会使数据变大
3.2json 格式转换成python
python转json格式使用dumps参数,或者使用dump格式直接将python格式转换成json格式并且存储到一个文件
json格式转pthon使用load或loads参数
练习
学生管理系统(文件版)
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('请输入正确的操作')
测试