欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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()等读写方法。。相信通过本篇博客的讲解,能够提高读者在该板块的认知程度,为进一步的学习打下基础。...

  • 文件:这里的文件其实指的的是计算机文件。它以计算机的的硬盘为载体,是存储在硬盘中的信息集合,可以包含任何的数据内容。通俗的说,文件是数据的集合和抽象。

一.文件的类型

文件包括 文本文件二进制文件 两种类型。

  • 文本文件:

文本文件一般由单一特定编码的字符组成,如: UTF-8 编码,内容容易统一展示和阅读。由于文本文件存在编码,所以,它也可以被看作是存储在磁盘上的长字符串,如: .txt 格式的文本文件。

  • 二进制文件:

二进制文件直接由 比特0比特1 组成,没有统一的字符编码,文件内部数据的组织格式与文件用途有关。(如:图⽚ mp3 视频…)

  • 值得一提的是:相对于文本文件,二进制文件由于没有统一的字符编码,只能当做作字节流,而不能看作是字符串。

二.文件的打开(open())

  • 我们通过open()函数来进行文件的打开操作,一般我们会将打开的文件通过一个变量进行接收。
  • 语法格式如下;
  • <变量名> = open(<文件路径及文件名>,<打开模式>)
  • 在进行代码举例之前,请读者先跟我一起简单过一下Built-in Functions-内置函数open()
    python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就
  • 显而易见,open()函数中有很多的参数,而我们现在做的,就是简单讲解第一个参数 file
  • 在说 file 参数之前,我们先简单了解一下绝对路径和相对路径。

1.绝对路径与相对路径

  • 绝对路径:文件存储在硬盘上的真正路径
  • 相对路径:相对于当前文件的路径
  • 这么说,可能还不够明了,相信通过举例说明,你就会get了。

2.文件的打开

  • 要打开的文件

python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就
python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就

  • 打开方式
# 相对路径(相对于当前文件的路径)
# 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)

# 返回值:返回的是一个对象  代表当前打开的文件

python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就

  • 对于绝对路径的路径书写,建议在绝对路径前面加上 r (原始字符串)。
  • 原始字符串r 的作用:告诉计算机当前的字符串是原始文本(而不是转义后的文本)。
  • 注意:当我们获取了文件对象时,所有的操作都是通过文件对象进行操作的。

3.文件的打开模式

这是python官方帮助文档中关于文件打开模式的说明
python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就

打开模式 含义
‘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()

python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就

  • 对于文件是否真的关闭,我们可以进行再次的读取来验证
# 文件的关闭(close())
file_name = 'demo.txt'
a = open(file_name)
print(a.read())
a.close()
# 我们都知道,我们是无法在不打开文件的情况下对文件记性读取的
print(a.read())

python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、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.

python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就

四.文件的读写

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)

python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就

  • 由上图我们可以看到read()函数中有一个 size参数 ,而且 默认size = -1 针对于size参数,当size的值为-1,或者省略时,将读取或返回文件的全部内容;否则,最多读取并返回 size大小的字符(在文本模式下)或size大小的字节(在二进制模式下)。如果已到达文件末尾,将返回一个空字符串()。

详情请见:Methods of File Objects——size

python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就

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

python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就

  • 我们通过 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

python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就

  • 下面进行 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)

python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就

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

python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就

  • 我们通过 ‘w’ ,进行文件的创建,并使用 read() 函数将一些内容写进去。因为是汉字,所以采用了 utf-8 的编码格式。
    python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就
  • 由上图可得,我们成功进行文件的写入。
  • 如果要读取的文件存在,使用 ‘w’ 进行覆盖写,文件内容被覆盖。
# 如果要读取的文件存在,使用'w'进行覆盖写,文件内容被覆盖
file_name = 'demo01.txt'
a = open(file_name,'w',encoding='utf-8')
a.write('王牌飞行员申请出战!\n')

python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就
python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就

  • 由上图可得,我们对原来的文件内容进行了内容的覆盖。

  • 如果你不想覆盖,可以使用 ‘a’ 进行文件的追加

# 如果你不想覆盖,可以使用'a'进行文件的追加
file_name = 'demo01.txt'
a = open(file_name,'a',encoding='utf-8')
a.write('你买单,我就来\n')
a.write('蒙多说你是个...')

python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就
python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就

(3).二进制文件的写入

  • 示例文件:
    python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就
# 二进制文件操作
# 通过'rb'模式来进行二进制文件的读取。
file_name = r'C:\Users\Asus\Desktop\昼夜 - 童话镇 (钢琴版).mp3'
with open(file_name,'rb') as a:
    print(a.read(100))
  • 其中的 a.read(100) 表示读取大小为100字节。
    python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就
  • 通过 ‘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)

python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就

  • 我们通过拷贝 昼夜 - 童话镇 (钢琴版).mp3 中的字节流,并将文本内容读写到新创建的文件 tonghua.mp3 中。
    python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就
  • 新创建的文件 tonghua.mp3 成功打开。
    python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就

本文地址:https://blog.csdn.net/weixin_45095678/article/details/107529795