当前位置: 移动技术网 > IT编程>脚本编程>Python > python练习生|(文件的打开、关闭、读写、open()、(相对、绝对)路径、with...as...、read())—恭喜你!解锁“文件使用”’新成就

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

2020年07月26日  | 移动技术网IT编程  | 我要评论

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

一.文件的类型

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

  • 文本文件:

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

  • 二进制文件:

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

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

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

  • 我们通过open()函数来进行文件的打开操作,一般我们会将打开的文件通过一个变量进行接收。
  • 语法格式如下;
  • <变量名> = open(<文件路径及文件名>,<打开模式>)
  • 在进行代码举例之前,请读者先跟我一起简单过一下Built-in Functions-内置函数open()
    路径
  • 显而易见,open()函数中有很多的参数,而我们现在做的,就是简单讲解第一个参数 file
  • 在说 file 参数之前,我们先简单了解一下绝对路径和相对路径。

1.绝对路径与相对路径

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

2.文件的打开

  • 要打开的文件

要打开的文件路径
要打开的文件02

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

文件的关闭01

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

文件的关闭02

  • 文件的关闭是为了保持计算机的性能(释放资源)。

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.

with...as...语句

四.文件的读写

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)

size

  • 由上图我们可以看到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参数 来进行固定文件长度的读取,每一次读取都是从上一次读取的位置来读取。如果剩余字符的数量小于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)

readline和readlines

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 的编码格式。
    demo01
  • 由上图可得,我们成功进行文件的写入。
  • 如果要读取的文件存在,使用 ‘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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网