一、文件的基本概念
1.1 文件的概念
文件是一个存储在某种持久性存储介质上的数据的结合,包含各种类型的信息,通常由数据、元数据、文件系统等几部分组成。
文件的属性有:文件名、位置、文件类型、文件大小、创建日期、修改日期、访问权限。
1.2 文件的分类
【文本文件】:
文本文件是由单一特定编码组成的文件,如UTF-8编码;
由于存在编码,文本文件也被看成是存储着数据的长字符串;
【二进制文件】:
直接由比特0和1组成,没有统一字符编码;
一般都存在二进制0和1的组织结构,即文件格式;
s = "Hello world!"
print("文本文件:", s)
print("二进制文件:", s.encode())
#【运行结果】:
# 文本文件: Hello world!
# 二进制文件: b'Hello world!'
1.3 文件位置/路径
在计算机系统中,路径是用来表示文件位置的一种方式。路径又分绝对路径和相对路径。
【绝对路径】:带有盘符的或者带有网址的,比如:
C:\Users\admin\Desktop\py_day3
【相对路径】:比如:./py_gj/py_day3 或 ../py_gj/py_day3
这里的点有特殊含义,一个点表示当前路径下,两个点表示上一级路径下。
path = "C:\\Users\\admin\\Desktop\\py_day3"
print(path)
path1 = './day3.3.py'
print(path1)
path2 = "../py_day3/day3.py"
print(path2)
#【运行结果】:
# C:\Users\admin\Desktop\py_day3
# ./day3.3.py
# ../py_day3/day3.py
二、文件的操作
2.1 打开文件open
# 语法格式:
open(file, [mode='r', buffering=-1, encoding=None])
# 参数说明:
# - file: 必需,文件路径(相对或者绝对路径)
# - mode: 可选,文件打开模式,默认为r
# - buffering: 可选,设置缓冲
# - encoding: 可选,一般使用utf-8
# 返回值结果:一个文件对象
其中,mode的常用模式如下:
| 打开方式 | 功能 | 文件存在时 | 文件不存在时 |
| r | 只读方式打开文件 | 打开 | 报错 |
| r+ | 以读写方式打开文件 | 打开 | 报错 |
| w | 只写方式打开文件 | 打开(清空之前内容) | 新建 |
| w+ | 以读写方式打开文件 | 打开(清空之前内容) | 新建 |
| a | 以追加方式打开文件(写) | 打开,保留之前内容 | 新建 |
| a+ | 以读写方式打开文件 | 打开,保留之前内容 | 新建 |
当我们需要以“字节[二进制]”形式读写文件时,只需要在mode参数的后面加 b 就可以了。
【 rb 】:以二进制形式打开一个文件,只读;
【 wb 】:以二进制形式打开一个文件,只写;
【 wb+ 】:以二进制形式打开一个文件,读写;
2.2 with关键字
使用 with 关键字的优点:
当我们操作文件的代码块结束后,文件会正确关闭,即便文件操作报错,也会正确关闭,无需手动调用 close()
with open('./111.txt', encoding='utf-8') as f:
read_data = f.read()
print(read_data)
2.3 关闭文件close()
# 语法格式:
file.close()
2.4 read()方法
# 语法格式:
file.read(size) # file为文件对象
# 参数说明:
# size(可选):为数字,表示从已打开文件中读取的字节计数,默认值为-1,默认情况下为读取全部。
with open('./111.txt', encoding='utf-8') as f:
read_data = f.read(5)
print(read_data)
#【运行结果】:(111.txt中有字符:hello world!)
# hello
2.5 readline()方法 与 readlines()方法
readline()方法:
# readline()方法:从文件中读取一行;
# 语法格式
file.readline(size)
# 参数说明:
# size 表示从文件读取的字节数。
# 注意:readline()方法会记住上一个readline()读取的位置,接着读取下一行。
readlines()方法:
# readlines()方法:读取文件的所有行,返回值是一个列表;
# 语法格式
file.readlines()
with open('./111.txt', encoding='utf-8') as f:
x = f.readlines()
print(x)
#【运行结果】:
# ['Hello World!\n', 'Hello Python!\n', 'Hello Everyone!']
2.6 write()方法
功能:将字符串写入文件中。
# 语法格式:
file.write(str) # file为文件对象
# 参数说明:
# str 代表要写入的字符串
s = 'Welcome to ShangHai!\nToday is : 2024/11/14 \n神清气爽'
with open('./111.txt', encoding='utf-8', mode='w') as f:
f.write(s)
2.7 文件指针定位
Python中文件读写,定位文件读写的指针会随着不断地读写而移动。
所以我们想要正确的读写,就需要控制指针的定位。
file.tell()
【功能】:返回文件的当前位置,即文件指针当前位置;
file.seek(offset[, whence])
【功能】:将文件内部光标定位到指定的位置;
【参数说明】:
offset:开始的偏移量,也就是代表需要移动偏移的字节数;
whence:可选,默认值为 0;
0 代表从文件开头开始算起
1 代表从当前位置开始算起
2 代表从文件末尾算起
【示例】:
file.seek(p, 0) 移动到文件第p个字节处,绝对位置
file.seek(p, 1) 移动到相对于当前位置之后的p个字节
file.seek(p, 2) 移动到相对文章尾之后的p个字节
file.seek(0, 0) 移动到文件开头
s = "Hello, world!"
with open('./binary.txt', mode='wb+') as f:
f.write(s.encode())
# f.seek(2,0) # 从开头 偏移2个
# f.seek(2,1) # 从当前 偏移2个
# f.seek(2,2) # 从末尾 偏移2个
# f.seek(0,0)
data = f.read(1)
print(data)
828

被折叠的 条评论
为什么被折叠?



