python第五次课----文件操作

本文介绍了Python中文件操作的基础知识,包括文件的概念、种类,如文本文件和二进制文件,以及如何进行文件的创建、读写和关闭。详细讲解了open函数及其变种方法,read和write方法的使用。同时,探讨了数据序列化,特别是pickle和json模块,用于将数据保存至磁盘或在网络间传输。给出了序列化和逆序列化的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值