day13 文件操作

本文介绍了文件操作的基本概念及步骤,包括数据持久化的意义、文件的读写操作及不同打开模式的应用。通过实例展示了如何在程序中进行文件的读取和写入。

文件操作

1、数据持久化

计算机内存分为两种:运行内存硬盘(磁盘)

保存在运行内存中的数据在程序运行结束后会自动销毁;保存在硬盘中的数据除非人为删除或者磁盘损坏否则会一直存在

程序中数据默认是保存在运行内存

数据持久化就将数据以文件的形式保存到硬盘中。(保存到硬盘中的数据才能做到这次运行程序产生的数据在下次运行程序的时候还能使用

对程序中的数据做持久化的步骤

1)确定持久化对象(哪些数据需要持久化)

2)创建文件并确定文件默认内容

3)在程序中需要这个数据的时候从文件中读数据

4)在数据发生改变以后需要将最新的数据写入到文件中

2、文件操作

打开文件后,操作文件中的内容

文件操作基本流程:打开文件 —> 操作文件(读写操作) —> 关闭文件

1)打开文件

open(file, mode='r', *, encoding=None) —— 以指定的方式打开指定文件

file —— 需要打开的文件的路径(文件地址)
mode —— 文件打开方式(默认为rt)
encoding —— 文本编码方式(只有以t的方式打开文件的时候才考虑给encoding赋值)

file —— 需要打开的文件的路径(文件地址)

绝对路径 —— 文件在计算机中的全路径(Windows电脑从盘名开始写)
相对路径 —— a.写路径的时候用 . 开头表示当前目录(当前写代码的文件所在目录) b.写路径的时候用 .. 开头表示当前目录的上层目录

# 使用绝对路径
open(r'E:\千峰培训\Python_project\project\01语言基础\day13-文件操作\files\data.txt')

# 使用.对应的相对路径,'./' 可以省略
open('./files/data.txt')

# 使用..对应的相对路径
open('../day13-文件操作/files/data.txt')

mode —— 文件打开方式

作用:a. 决定打开文件后是能还是能;b. 决定操作文件的时候数据是字符串还是二进制

对应值

1)决定打开后是读还是写
r —— 只读(文件不存在会报错),
w —— 只写(先清空再写;如果文件不存在,自动创建文件),
a —— 只写(追加;如果文件不存在,自动创建文件)
2)决定操作文件的时候数据类型(strbytes
t(默认值)—— 字符串类型(操作文件的时候涉及到的数据必须是字符串,打开文本文件)
b —— 二进制文件(图片、视频、音频、PDF)

注意: 给mode赋值的时候必须在两组中每一组选一个值(不写默认为rt

​ (‘rt’、‘rb’、‘r’、‘wt’、‘wb’、‘w’、‘at’、‘ab’、‘a’)

# 1)r —— 只读
f = open('files/data.txt', 'r')
f.read()
f.write('xy')   # 报错:io.UnsupportedOperation: not writable

# 2)w —— 只写,清空原文件
f = open('files/data.txt', 'w')
f.write('sdd')
f.read()    # 报错:io.UnsupportedOperation: not readable

# 3)a —— 只写,追加
f = open('files/data.txt', 'a')
f.write('\nahshd')
f.read()    # 报错:io.UnsupportedOperation: not readable

# 4)读的方式打开不存在的文件,会自动创建
# open('files/data1.txt', 'r')    # 报错:FileNotFoundError: [Errno 2] No such file or directory: 'files/data1.txt'
open('files/data1.txt', 'w')

# 5)t是字符串
f = open('files/data.txt', 'rt')
result = f.read()
print(type(result))     # <class 'str'>

f = open('files/data.txt', 'at')
f.write('29')

# 6)b是二进制
f = open('files/data.txt', 'rb')
result = f.read()
print(type(result))     # <class 'bytes'>

f = open('files/data.txt', 'ab')
f.write(bytes('abc', encoding='utf-8'))

encoding —— 文本编码方式(只有以t的方式打开文件的时候才考虑给encoding赋值)

不同的文本编码方式决定字符编码在保存的时候采用的字节数(大小)
1)常用文本编码方式gbk —— 英文符号单字节、中文符号双字节
utf-8 —— 英文符号单字节、中文符号三字节
2)使用原则:不同的时候操作同一个文件采用的编码方式必须一致(不一致可能乱码也可能直接报错)

f = open('files/data4.txt', 'w', encoding='gbk')
f.write('aaa更好回家')
f = open('files/data4.txt', encoding='gbk')
print(f.read())

f = open('files/data5.txt', 'w', encoding='utf-8')
f.write('aaa更好回家')
f = open('files/data5.txt', encoding='utf-8')
print(f.read())

2)操作文件

1)文件操作

文件对象.read() —— 从读写位置开始,读到文件结尾(读写位置默认在文件开头
文件对象.readline() —— 从第一行开头读到下一行开头

2)文件操作

文件对象.write(数据)

# 1)读操作
f = open('files/test1', 'rt', encoding='utf-8')
result = f.read()
print(result)
print('~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~')

# 移动读写位置到开头
f.seek(0)
result = f.read()
print(result)
print('~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~')


# 练习:读test1中的内容,一行一行的读,读完为止

f = open('files/test1', 'rt', encoding='utf-8')

while True:
    result = f.readline()
    if result == '':
        break
    else:
        print(result, end='')

print('~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~')

# 写操作
f2 = open('files/data.txt', 'wt', encoding='utf-8')
f2.write('hello world ')
f2.write(str([10, 20, 30, 40]))

3)关闭文件

文件对象.close()

f = open('files/test1', 'rt', encoding='utf-8')
f.close()

f.read()        # 报错:ValueError: I/O operation on closed file.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值