python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就
程序员文章站
2023-02-17 09:24:06
python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())——恭喜你!解锁“文件使用”’新成就。本篇博客主要讲述(文本、二进制)文件的打开,关闭,以及相应的读写操作。讲述了open(),讲述了文件打开的模式('r',‘w’,'x','a','b'...)、close()、with...as...语句、read()、readline()、write()等读写方法。。相信通过本篇博客的讲解,能够提高读者在该板块的认知程度,为进一步的学习打下基础。...
python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())——恭喜你!解锁“文件使用”’新成就
- 文件:这里的文件其实指的的是计算机文件。它以计算机的的硬盘为载体,是存储在硬盘中的信息集合,可以包含任何的数据内容。通俗的说,文件是数据的集合和抽象。
一.文件的类型
文件包括 文本文件 和 二进制文件 两种类型。
- 文本文件:
文本文件一般由单一特定编码的字符组成,如: UTF-8 编码,内容容易统一展示和阅读。由于文本文件存在编码,所以,它也可以被看作是存储在磁盘上的长字符串,如: .txt 格式的文本文件。
- 二进制文件:
二进制文件直接由 比特0 和 比特1 组成,没有统一的字符编码,文件内部数据的组织格式与文件用途有关。(如:图⽚ mp3 视频…)
- 值得一提的是:相对于文本文件,二进制文件由于没有统一的字符编码,只能当做作字节流,而不能看作是字符串。
二.文件的打开(open())
- 我们通过open()函数来进行文件的打开操作,一般我们会将打开的文件通过一个变量进行接收。
- 语法格式如下;
<变量名> = open(<文件路径及文件名>,<打开模式>)
- 在进行代码举例之前,请读者先跟我一起简单过一下Built-in Functions-内置函数open()
- 显而易见,open()函数中有很多的参数,而我们现在做的,就是简单讲解第一个参数 file 。
- 在说 file 参数之前,我们先简单了解一下绝对路径和相对路径。
1.绝对路径与相对路径
- 绝对路径:文件存储在硬盘上的真正路径
- 相对路径:相对于当前文件的路径
- 这么说,可能还不够明了,相信通过举例说明,你就会get了。
2.文件的打开
- 要打开的文件
- 打开方式
# 相对路径(相对于当前文件的路径)
# demo.txt 在和 文件.py相同路径下的子文件夹中
file_name = 'demo.txt'
a = open(file_name)
print(a)
# 绝对路径(文件存储在硬盘上的真正路径)
# 听闻.txt 的路径在桌面上
file_name = r'C:\Users\Asus\Desktop\听闻.txt'
b = open(file_name,encoding='utf-8')
print(b)
# 返回值:返回的是一个对象 代表当前打开的文件
- 对于绝对路径的路径书写,建议在绝对路径前面加上 r (原始字符串)。
- 原始字符串r 的作用:告诉计算机当前的字符串是原始文本(而不是转义后的文本)。
- 注意:当我们获取了文件对象时,所有的操作都是通过文件对象进行操作的。
3.文件的打开模式
这是python官方帮助文档中关于文件打开模式的说明
打开模式 | 含义 |
---|---|
‘r’ | 只读模式(默认) |
‘w’ | 打开文件后进行 覆盖 写入 ,如果文件不存在,则进行创建;如果文件内有内容,则覆盖原文件(内容) |
‘x’ | 创建写模式,如果文件存在,则返回异常 |
‘a’ | 追加写模式,如果文件不存在则进行创建,如果文件存在则在原文件最后追加内容 |
‘b’ | 二进制文件模式 |
‘t’ | 文本文件模式,默认值 |
‘+’ | 在原功能( ‘r’、‘w’、‘x’、‘b’ )基础上增加读写功能 |
三.文件的关闭(close())
1.close()
# 文件的关闭(close())
file_name = 'demo.txt'
a = open(file_name)
print(a.read())
a.close()
- 对于文件是否真的关闭,我们可以进行再次的读取来验证
# 文件的关闭(close())
file_name = 'demo.txt'
a = open(file_name)
print(a.read())
a.close()
# 我们都知道,我们是无法在不打开文件的情况下对文件记性读取的
print(a.read())
- 文件的关闭是为了保持计算机的性能(释放资源)。
2.with…as… 用句
- 如果你在打开文件时忘记关闭文件,那么你可以使用 with…as… 用句 来进行代码的编写。因为使用该语句可以进行文件的自动关闭。
# with...as 用法
# 有了with...as 语句的使用,可以防止因忘写close(),而导致后续操作对文件产生影响。
# with...as 语句可以自动对文件进行关闭
file_name = r'C:\Users\Asus\Desktop\听闻.txt'
with open(file_name,encoding='utf-8') as obj:
print(obj.read())
print(obj.read()) # ValueError: I/O operation on closed file.
四.文件的读写
1.文件的读取
- 我们在之前已经说了,文件的类型分为文本文件和二进制文件。当使用open()函数打开文件时,默认是以⽂本⽂件的形式打开的, encoding = None 所以处理⽂本⽂件时要指定编码。
(1).文件的读取方法
方法 | 含义 |
---|---|
<变量>.read(size = -1) | 从文件读取整个文件的内容。 |
<变量>.readline(size = -1) | 从文件中读取一行内容 |
<变量>.readlines(size = -1) | 从文件中读取所有行,把每行当做一个元素,保存在一个列表中。 |
… | … |
- 针对于文件读取中的参数,我们来简单说一下。
file_name = r'C:\Users\Asus\Desktop\听闻.txt'
with open(file_name,encoding='utf-8') as obj:
print(obj.read())
help(obj.read)
- 由上图我们可以看到read()函数中有一个 size参数 ,而且 默认size = -1 针对于size参数,当size的值为-1,或者省略时,将读取或返回文件的全部内容;否则,最多读取并返回 size大小的字符(在文本模式下)或size大小的字节(在二进制模式下)。如果已到达文件末尾,将返回一个空字符串()。
详情请见:Methods of File Objects——size
- size参数用来指定读取字符的数量
# 原始字符串内容及长度
file_name = 'demo.txt'
a = open(file_name)
b = a.read()
print(b)
print(len(b))
a.close()
#打印字符串内容及长度
# 每一次读取都是从上一次读取的位置来读取。
# 如果剩余字符的数量小于size,则一下读取剩余的所有内容。
file_name = 'demo.txt'
a = open(file_name)
b = a.read(7)
c = a.read(90)
print(b)
print(len(b))
print(c)
a.close()
- 我们通过 size参数 来进行固定文件长度的读取,每一次读取都是从上一次读取的位置来读取。如果剩余字符的数量小于size,则一下读取剩余的所有内容。
- 针对文件比较大的话,可以进行固定字节的读取,通过while循环语句进行。
# 文件的读取
file_name = r'C:\Users\Asus\Desktop\听闻.txt'
a = open(file_name,encoding = 'utf-8')
# 定义名为 chunk 的变量来制定读取大小
chunk = 7
while True:
b = a.read(chunk)
# 默认读取内容后,进行换行
print(b,end='')
# 没有内容,退出循环
if not b:
break
- 下面进行 readline() 和 readlines() 的举例
# readline()和readlines()
file_name = r'C:\Users\Asus\Desktop\听闻.txt'
a = open(file_name,encoding ='utf-8',)
# 打印一行
b = a.readline()
print(b)
# 读取文本中的所有内容,以每行为一个元素,保存在一个列表当中
c = a.readlines()
print(c)
2.文件的写入
(1).文件写入方法
方法 | 含义 |
---|---|
<变量>.write(s) | 向文件中写入内容(字符串或字节流) |
<变量>.writelines(lines) | 将一个元素作为字符串列表的整体写入文件 |
… | … |
(2).文本文件的写入
# 文件的写入
file_name = 'demo01.txt'
a = open(file_name,'w',encoding='utf-8')
a.write('畏惧信仰,畏惧力量!\n')
a.write('奥利给\n')
a.close()
- 我们通过 ‘w’ ,进行文件的创建,并使用 read() 函数将一些内容写进去。因为是汉字,所以采用了 utf-8 的编码格式。
- 由上图可得,我们成功进行文件的写入。
- 如果要读取的文件存在,使用 ‘w’ 进行覆盖写,文件内容被覆盖。
# 如果要读取的文件存在,使用'w'进行覆盖写,文件内容被覆盖
file_name = 'demo01.txt'
a = open(file_name,'w',encoding='utf-8')
a.write('王牌飞行员申请出战!\n')
-
由上图可得,我们对原来的文件内容进行了内容的覆盖。
-
如果你不想覆盖,可以使用 ‘a’ 进行文件的追加
# 如果你不想覆盖,可以使用'a'进行文件的追加
file_name = 'demo01.txt'
a = open(file_name,'a',encoding='utf-8')
a.write('你买单,我就来\n')
a.write('蒙多说你是个...')
(3).二进制文件的写入
- 示例文件:
# 二进制文件操作
# 通过'rb'模式来进行二进制文件的读取。
file_name = r'C:\Users\Asus\Desktop\昼夜 - 童话镇 (钢琴版).mp3'
with open(file_name,'rb') as a:
print(a.read(100))
- 其中的 a.read(100) 表示读取大小为100字节。
- 通过 ‘wb’ 模式进行二进制文件的写入
# 通过'rb'模式来进行二进制文件的读取。
file_name = r'C:\Users\Asus\Desktop\昼夜 - 童话镇 (钢琴版).mp3'
with open(file_name,'rb') as a:
# print(a.read(100))
# 通过'wb'模式进行二进制文件的写入
# 定义了一个新文件名称 'tonghua.mp3'
new_name = 'tonghua.mp3'
# 二进制文件的覆盖写操作
with open(new_name,'wb') as b:
# 定义读取的大小
chunk = 1024*100 # 1024*100 = 1k*100 = 100k
while True:
c = a.read(chunk)
if not c:
break
b.write(c)
- 我们通过拷贝 昼夜 - 童话镇 (钢琴版).mp3 中的字节流,并将文本内容读写到新创建的文件 tonghua.mp3 中。
- 新创建的文件 tonghua.mp3 成功打开。
本文地址:https://blog.csdn.net/weixin_45095678/article/details/107529795
上一篇: 关于吃杨桃要去皮吗的疑问