python文件的基本操作
文件操作:
文件操作 | 功能 |
---|---|
r | 对文件只读形式打开 |
w | 对文件只写形式打开,若文件不存在则会创建文件,文件存在有内容的话则会清空内容 |
a | 对文件内容进行添加,指针位置在文件内容的最后 |
r+ | 从开始的地方进行追加 |
w+ | 从头开始读写 |
a+ | 从尾部进行追加 |
注意事项:若为二进制文件,如图片、视频等使用rb、wb、ab方式进行打开
文件打开与关闭的方式
文件打开方式:f = open("文件名")
文件关闭方式:f.close()
实例:实现文件的拷贝
代码:
f = open("westos",'r')
file = f.read()
f.close()
f1 = open("westos1",'w')
f1.write(file)
f.close()
运行结果
westos内容:
westos1内容:
file对象的常用方法:
1.读
- read:读取的指定字节,默认1024
- readline:读取文件的一行内容
- readlines:读取文件的所有内容,返回一个列表
2.写
- write:从指针所在位置写入,写入是字符串内容
- writelines:将列表里面的每个元素写入文件中
3.定位
- tell:指针当前所在位置
- seek(offset,from):指针移动位置(offset为偏移量,from=0为移动指针到文章开头,from=1指代当前位置,from=2为移动指针到文章结尾)
实例:移动指针
f = open("westos",'a+')
f.write("\nnew line")
content = f.read()
print(content)
print("当前指针的位置是:",f.tell())
f.seek(0,0)
print("当前指针的位置是:",f.tell())
content = f.read()
print(content)
f.close()
运行结果
python中的with语句(安全上下文)
with语句:python中的with语句适用于对资源进行访问的场合,保证不管处理过程中是否发生错误或者异常都会自动执行规定的“清理”操作,释放被访问的资源,比如有文件读写后自动关闭、线程中锁的自动获取和释放等。使用该语句的时候文件可以进行for循环。
实例:按行读取文件
代码:
with open("westos",'r') as f:
line = 0
for i in f:
line += 1
print("第%s行的内容为:"%(line),i)
运行结果:
os
os:语义为操作系统,处理操作系统相关的功能,可跨平台。比如显示当前目录下所有文件/删除某个文件/获取文件大小
os模块指令 | 功能 |
---|---|
os.name() | 查看当前电脑的操作系统(nt:当前是windows系统,posix:当前是linux系统) |
os.uname() | 查看当前操作系统的详细信息,在windows中需要加入platform模块 |
os.path.isabs() | 判断是否为绝对路径 |
os.path.abspath() | 生成绝对路径 |
os.path.join() | 返回一个绝对路径:当前目录绝对路径+文件名/目录名 |
os.path.basename() | 获取文件名 |
os.path.dirname() | 获取目录名 |
os.makedirs() | 递归创建目录 |
os.mkdir() | 创建目录 |
os.rmdir() | 删除目录 |
os.mknod() | 创建文件 |
os.remove() | 删除文件 |
os.rename() | 文件重命名 |
os.path.exists() | 判断文件是否存在 |
os.path.splitest() | 分离后缀名 |
os.path.split() |
查看当前系统信息
import platform
import os
print(platform.uname())
运行结果:
Json
- JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于ECMAScript的一个子集
- JSON采用完全独立于语言的文本格式,但是也使用了类似C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)
- 这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)
python类型数据和JSON数据格式的互相转换
从JSON到Python:decode(load或loads)
从Python到JSON:encode(jump或jumps)
注意事项:
1.python中的str类型到JSON中转为unicode类型,None转为null,dict对应object
2.python中的集合不能转成json格式
实例1.将python数据类型转换为json字符串
代码:
langs = {
"c语言":{
"2020-8":20,
"2020-9":25,
},
"python":{
"2020-8":30,
"2020-9":18,
},
}
import json
result = json.dumps(langs,ensure_ascii=False)
print(result)
运行结果:
实例2.将json的格式转换成python,并统计c语言和python的热度值
代码:
import json
with open("langs.json",'w',encoding='utf-8') as f:
json.dump(langs,f,indent=4,ensure_ascii=False)
print("存储完成")
with open("langs.json",encoding='utf-8') as f:
lang = json.load(f)
print(langs)
for name,info in lang.items():
sum_value = 0
for key,value in info.items():
sum_value += value
print("%s的热度值为:"%(name),sum_value)
运行结果:
作业:
1.读取一个文件,显示除了以#为开头行以外的所有行
代码:
with open("#",'r',encoding='utf-8') as f:
for i in f:
if not i.startswith('#'):
print(i)
文件内容:
运行结果:
2.学生信息管理系统(文件版)
(1)必须使用自定义函数,完成对程序的模块化
(2)学生信息至少包含:姓名、年龄、学号,除此以外可以适当添加
(3)必须完成的功能:添加、删除、修改、查询、退出
代码:
import os
import json
def add(num):
if num not in gl.keys():
name = input('请输入学生姓名:')
age = int(input('请输入年龄:'))
gl.update({num:{'姓名':name,'年龄':age}})
clear(gl)
print("学号是%s的学生信息已添加成功"%(number))
else:
print("学号是%s的学生信息已存在"%(number))
def delete(num):
if num in gl.keys():
gl.pop(num)
clear(gl)
print("学号是%s的学生信息已被删除"%(num))
else:
print("学号是%s的学生信息不存在"%(num))
def change(num):
if num in gl.keys():
ch = input("请输入要修改的学生信息(姓名|年龄):")
content = input("修改该学生的%s为:"%(ch))
gl[num].update({ch:content})
clear(gl)
print("学号是%s的学生信息更改成功"%(num))
else:
print("学号是%s的学生信息不存在"%(num))
def look(num):
if num in gl.keys():
print(gl[num])
else:
print("学号是%s的学生信息不存在" % (num))
def clear(d):
with open('学生信息管理','w') as f:
json.dump(d,f,indent=4,ensure_ascii=False)
while True:
put = input("请选择想要使用的功能(添加|删除|修改|查询|退出):")
if os.path.exists("学生信息管理"):
if os.path.getsize("学生信息管理")!=0:
with open("学生信息管理",mode='r') as f:
gl = json.load(f)
else:
gl = {}
else:
gl = {}
if put == '退出':
break
elif put == '添加':
number = input('要添加的学生学号:')
add(number)
elif put == '删除':
number = input('要删除的学生学号:')
delete(number)
elif put == '修改':
number = input("请输入要修改的学生学号:")
change(number)
elif put == '查询':
number = input("请输入要查询的学生学号:")
look(number)
运行结果: