1、文件的概念
-
l计算机的⽂件,就是存储在某种⻓期储存设备上的⼀段数据 ;
-
⻓期存储设备包括:硬盘、U 盘、移动硬盘、光盘 ;
-
⽂件的作⽤是可以将数据长期保存下来, 在需要的时候再使用。
2. 文件的种类
(2)文本文件
-
可以使⽤⽂本编辑软件查看;
-
例如:python 的源程序 ,txt 文本文件、doc、ppt、表格
(2) 二进制文件
-
二进制文章是以01方式进行存储的
-
保存的内容不是给⼈直接阅读的,⽽是提供给其他软件使⽤的
-
例如:图⽚⽂件、⾳频⽂件、视频⽂件等等 ;
-
⼆进制⽂件不能使⽤⽂本编辑软件查看。
3. 文件操作简介
python的基本文件操作包括:创建、读、写、关闭等,此外,Python 中内置了一些文件操作函
数。我们在在编程工作中使用 Python 操作文件还是非常常见的。
操作流程
(1)新建/打开文件
(2)读取/写入
(3)关闭文件
4. 基本操作方式
访问模式 | 说明 |
r | 以只读方式打开文件;文件的指针将会放在文件的开头;这是默认模式。 |
w | 以只写方式打开文件,如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a | 打开一个文件追加,如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写,如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果改文件不存在,创建新文件用于读写。 |
rb+ | 以二进制格式打开一个文件 |
5. 打开文件操作
3.1 创建文件
一般情况下,我们在Python 中使用 open() 函数创建或打开文件
案例: D:/python中创建一个文件a.txt
f = open("d:/python/a.txt") # 在磁盘D下面的python文件中创建a.txt文件
f.close() # 关闭文件
open变种方法
# 原始方法
f = open("a.txt", "r")
text = f.read()
print(text)
f.close()
# 新写法 【不需要手动关闭文件,文件会自动关闭】
with open("a.txt", "r") as f:
text = f.read()
print(text)
3.2 打开文件读写方式
(1)read方法
-
作用:是从打开的文件中读取内容
-
原理:read是通过移动指针来从文件中读取内容
案例:向文件中读取内容
(2)write方法
-
作用:是向文件中写入内容
说明 | |
write(str) | 将字符串写入文件,返回写入字符长度 |
writeline(st) | 向文件写入一个字符串列表 |
案例:向文件中写入内容
str1 = "hello boys" # 第一步:新建/打开文件
file = open("d:/py1/myfile.txt","a")
file.write(str) # 第二步:写入
file.close() # 第三步:关闭文件
案例:将myfile.txt 复制一个新文件afile.txt
f1 = open("d:/python/myfile.txt","r") # 以只读方式打开myfile.txt,然后读取内容
f2 = open("d:/python/a.txt","w") # 以只写方式打开a.txt,准备写入内容
s = f1.read()
f2.write(s) # 然后将从myfile.txt读的内容写入到a.txt
f1.close()
f2.close() # 关闭文件
6、文件常用方法
read() | 从文件中读取全部内容,读取后指针指向文件的末尾 |
write() | 向文件中写入内容 |
write(str) | 将字符串写入文件,返回写入字符长度 |
writelines(s) | 向文件写入一个字符串列表 |
readline() | 执行一次readline,就会从文件中读取一行出来 |
readlines() | 执行一次readline,就会将文件中的全部内容读取出来,并保存成一个列表,一行就是一个元素 |
tell() | 返回文件对象在文件中的当前位置 |
seek() | 将文件对象移动到指定的位置;offset 表示移动的偏移量;whence 为可选参数,值为 0 表示从文件开头起算(默认值)、值为 1 表示使用当前文件位置、值为 2 表示使用文件末尾作为参考点 |
案例:让用户输入4个用户名,将用户名保存到文件中
f1 = open("d:/python/name.txt","w") # 创建name.txt并对其进行写入
for n in range(4): # 使用for循环输入四个姓名
name = input("请输入姓名: ")
s1 = name +"\n"
if n ==3: # 输入最后一个姓名后不换行
s1 =name
f1.write(s1) # 将输入的姓名保存到name.txt中
f1.close() # 关闭文件
读取你写入name.txt中的内容
f1 = open("d:/python/name.txt","r")
s=f1.read() # 读取name.txt中的文件内容
f1.close()
print(s)
指针位置
file = open("d:/python/a.txt","r") # 打开文件
print(file.read())
print(file.tell()) # 显示现在指针所在位置
file.seek(0) # 将指针移动到0的位置
print(file.tell())
print(file.readlines())
file.close() # 关闭文件
7. 数据序列化
(1)概念
-
序列化:将一个任意的数据类型转换成python能识别和处理的字符串
-
逆序列化:将python能识别的字符串转换成对应的数据类型
-
序列化的目的:将数据类型保存到磁盘上,也可以实现将数据发生给另外一个主机
数据类型
字符串 整数 列表 元组 集合 字典
实现序列化的方法
(1)pickle
(2)json
(2)pickle模块
-
序列化方法:pickle.dump()
-
逆序列化方法:pickle.load()
pickle.dump实现序列化
pickle.dump(要保存的对象, 文件名)
案例:将字典实现保存到文件中
# 导入模块
import pickle
# 定义一个字典对象
nameList = {"tom":["hebei",18,"男"], "jerry":["tianjin",20,"女"]}
# 打开文件,打开方式 wb
file = open("d:/py1/c.pkl","wb")
# 用dump方法将字典写入到打开的文件中
pickle.dump(nameList, file)
# 关闭文件
file.close()
pickle.load实现逆序列化
pickle.load(文件名)
案例:从文件中读取字典类型保存的数据
import pickle
file = open("d:/py1/c.pkl","rb")
d1 = pickle.load(file)
file.close()
print(d1)
注意:可以多次执行序列化和逆序列化,但是不建议这么做
(3)json模块
json的特点
1)JSON 是纯文本;
2)JSON 便于阅读和编写;
3)JSON 具有清晰的层级结构;
4)有效地提升网络传输效率;
JSON 语法规则
1)大括号保存对象;
2)中括号保存数组;
3)对象数组可以相互嵌套;
4)数据采用键值对表示;
5)多个数据由逗号分隔;
JSON 值
1)数字(整数或浮点数);
2)字符串(在双引号中);
3)逻辑值(true 或 false);
4)数组(在中括号中);
5)对象(在大括号中);
示例
{
"name": "tom",
"age": 18,
"isMan": true,
"school": null,
"address": {
"country": "中国",
"city": "河北",
"street": "石家庄"
},
"numbers": [2, 6, 8, 9],
"links": [
{
"name": "zaizhuo",
"url": "http://www.zaizhuo.cn"
},
{
"name": "载卓",
"url": "http://www.zaizhuo.com"
}
]
}
读取json文件
-
json.load(json文件名)
-
json.dump(data, f, ensure_ascii=False)
案例:读取json文件
# 导入模块
import json
# 打开文件
f = open('d:/py1/1.json', "r", encoding='UTF-8')
# 读取json文件
data = json.load(f)
# 返回的data 数据类型为字典或列表
print(data)
f.close()
案例:写入json格式数据
import json
data = {'name': 'tom', 'age': 20, 'country': '中国'} f = open('temp.json', 'w', encoding='UTF-8') json.dump(data, f, ensure_ascii=False)
# ensure_ascii=False 代表中文不转义
f.close()