文件系统的概述

计算机的文件系统是一种储存和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念。严格地说,文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型(Abstract data type)。

文件操作

在Python中实现文件的读写操作其实非常的简单,通过Python内置的open函数,我们可以指定文件名、操作模式、编码信息等来获得操作文件的对象,接下来就可以对文件进行读写操作了。

文件的操作模式有:读取(r)、写入(w或x)、追加(a)、二进制模式(b)、文本模式(t)、更新(+)。

读写文本文件

读写文本文件时,需要在使用open函数时指定好带路径的文件名(绝对路径或者相对路径)并将文件模式设置为只读模式(r),然后通过encoding参数指定编码,如果指定的编码格式和源文件的格式不一样,就可能倒是文件解析失败。代码如下:

# 需要对文件进行写的操作时可以将mode改为w模式
file1 = open(file="文件的绝对路径或相对路径",mode="r",encoding="编码格式")

# 将文件进行读取
print(file1.read())

# 将打开的文件关闭
# 一定要关闭文件,避免出现不必要的问题
file1.close()

我们在使用open方法打开文件的时候必须要使用close方法进行文件的关闭,这样操作起来非常的不方便,有时候我们可能忘记使用close方法,这样就可能导致文件出现问题,严重的可能会影响系统磁盘。那么我们有什么办法能不使用close方法直接使文件关闭呢?这时我们可以使用with open方法进行打开。代码如下:

# 需要对文件进行写的操作时可以将mode改为w模式
with open(file="文件的绝对路径或相对路径",mode="r",encoding="编码格式") as file1:

    # 将文件进行读取
    print(file1.read())

此时我们的文件可以自行关闭,不需要我们手动进行关闭,提升了安全性。

我们已经学过异常处理了,如果我们打开的文件时候出现了错误,这时候我们就需要用到异常处理模块。代码如下:

try:
    with open(file="文件的绝对路径或相对路径", mode="r", encoding="编码格式") as file1:
        # 将文件进行读取
        print(file1.read())
except Exception as e:
    print(e)    #[Errno 2] No such file or directory: '文件的绝对路径或相对路径'

除了使用文件对象的read方法读取文件之外,还可以使用for-in循环进行读取或者用readlines方法将文件按行读取到一个列表中,代码如下:

with open("文件的绝对路径或相对路径", "r", encoding="编码格式") as f:
    print(f.read())

# 通过for-in循环逐行读取
with open("文件的绝对路径或相对路径", mode="r") as f:
    for line in f:
        print(line, end='')
print()

# 读取文件按行读取到列表中
with open("文件的绝对路径或相对路径") as f:
    # 使用readlines方法,结果返回的是一个列表
    lines = f.readlines()
print(lines)

上面我们对文件的读取有一定的了解了,接下来就是在文件中写入内容。这时只需要把mode参数设置为w即可,如果要更新文件中的内容可以将mode参数设置为w+,如果要对文件进行追加式的写入,需要将mode参数设置为a,如果要写入的文件不存在会自动创建文件,而不是报错。代码如下:

# 使用w进行操作
with open("文件的绝对路径或相对路径", "w", encoding="编码格式") as f:
    f.write("要写入的内容")

# 使用w+进行操作
with open("文件的绝对路径或相对路径", mode="w+",encoding="编码格式") as f:
    f.write("要添加的内容")

# 使用a进行操作
with open("文件的绝对路径或相对路径",mode="a",encoding="编码格式") as f:
    f.write("要追加的内容")

读写二进制文件

在上面介绍了文本的读写,二进制文件的读写就只是将mode参数设置为rb(读)或wb(写)。代码如下:

try:
    with open("文件的绝对路径或相对路径", "rb") as fs1:
        data = fs1.read()
        print(type(data))  # <class 'bytes'>
    with open("文件的绝对路径或相对路径", "wb") as fs2:
        fs2.write(data)
except FileNotFoundError as e:
    print('指定的文件无法打开.')
except IOError as e:
    print('读写文件时出现错误.')
print('程序执行结束.')

读写JSON文件

JSON文件格式和Python中的字典相差不多,下面是两者之间的对应关系:

因为这里涉及到对JSON文件格式的操作,就不得不导入JSON模块,json模块中有几个常用的函数在读写中经常用到:

  • dump : 将Python对象按照JSON格式序列化到文件中
  • dumps :将Python对象处理成JSON格式的字符串
  • load : 将文件中的JSON数据反序列化成对象
  • loads :将字符串的内容反序列化成Python对象

序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换为可以存储或传输的形式,这样在需要的时候能够恢复到原先的状态,而且通过序列化的数据重新获取字节时,可以利用这些字节来产生原始对象的副本(拷贝)。与这个过程相反的动作,即从一系列字节中提取数据结构的操作,就是反序列化(deserialization)

代码如下:

import json

try:
    with open("文件的绝对路径或相对路径", "w", encoding="编码格式") as fs:
        json.dump("要写入的文件数据", fs)
except IOError as e:
    print(e)
print('保存数据完成!')
04-20 23:16