这一节讲个挺有意思的知识,至少在我以前刚刚接触编程的时候,对于文件操作还是觉得很有意思的事情,这也许是有一种操作文件的激情吧,希望看到这篇文章的读者也会有这样的激情,说明还是很有兴趣的,当然,就算没有,可能是你的兴趣点不在这。

一、文件的打开

首先,我们还是从文件的打开与关闭讲起。讲这个之前,我们先了解一下文件操作的大致流程,这个流程不止 Python 是这样的,几乎所有的编程语言的操作都是这样的,有了这样的一个流程,再写程序的时候,思路就豁然开朗了。

6Hive读写文件流程 文件读写流程图_6Hive读写文件流程

从这个图我们可以看出,文件操作一般会经历打开文件、读写数据、关闭文件,这样的大概的流程,所以,下面的知识,我们就按照这个流程一一讲解涉及的知识点。

一提到文件打开,我们就会想到 open() 这个函数,打铁趁热,我们就将一下这个函数的用法。

open()

函数语法

open(name[, mode[, buffering[,encoding]]])

参数解释

  • name : 访问的文件名称的字符串值(区分绝对路径和相对路径)。
  • mode : mode 决定了打开文件的模式:只读,写入,追加等。
  • buffering : 如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。对于新手小白想更轻松的学好Python基础,Python爬虫,web开发、大数据,数据分析,人工智能等技术,这里给大家分享系统教学资源,架下我尉(同英): 2763 177 065 【教程/工具/方法/解疑】

实践是检验真理的唯一标准

# -*- coding:utf-8 -*-
# 新建打开文件操作,打开文件hello.txt,以读取的模式打开
f = open('./hello.txt', 'r')

是不是易如反掌,这里只是打开了这个文件,还没有进行任何的操作,文件操作待我娓娓道来,这个实例中用到了文件读取的模式,介绍一下常用的模式。

6Hive读写文件流程 文件读写流程图_python_02

6Hive读写文件流程 文件读写流程图_开发语言_03

注意:对于初学者来说,需要注意的是,模式b的意思是代表二进制读写+直接代表读写,也就是有读取和写入两个操作。也许你不理解什么是二进制读写,这里讲一下,数据的保存是有文本字符保存和二进制保存的,所以,在读写的时候,自然也就有两种读写方式了。具体的可以查查资料,学过 C 或者 C++ 就很清楚了。

高级的打开open

这里为什么说高级的打开呢?

在前面说到的文件操作流程中,是不是不可避免的都需要自己去执行关闭文件操作呢?其实不是的,在 Python 中提供了一种更加方便的形式,不需要手动的去关闭文件。

语法

with…open

实践是检验真理的唯一标准

with open('./hello.txt', 'r') as f:
    print(f)

注意:这里的as和前面提到过的as是异曲同工的,都是起到别名的作用。

至于为什么需要这种写法,就是可以避免每次需要手动关闭文件,这种方式会在需要的时候自动关闭。

二、文件的操作

文件操作流程第一步文件打开相信理解透彻了,接下来就是重头戏文件的操作了。对于新手小白想更轻松的学好Python基础,Python爬虫,web开发、大数据,数据分析,人工智能等技术,这里给大家分享系统教学资源,架下我尉(同英): 2763 177 065 【教程/工具/方法/解疑】

文件读取

read()方法

read的使用方法异常简单

read(num)

read()可以读取文件里面的内容。num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。

实践是检验真理的唯一标准
这里接着上面打开的流程接着写程序。

with open('./hello.txt', 'r') as f:
    # 如果不写入参数,代表读取全部内容
    str = f.read()
    print(str)
    print('*' * 10)
    # 读取4字节
    str2 = f.read(4)
    print(str2)

6Hive读写文件流程 文件读写流程图_python_04

哪还有其他的读取方式吗?

readline()/readlines()

  • readline:读取第一行,返回一个字符串。
  • readlines:按照行的方式读取整个文件,每一行作为列表的一个元素,最后返回一个列表。

实践是检验真理的唯一标准

# 使用readlines
with open('./hello.txt', 'r') as f:
    content = f.readlines()
    print('类型:', type(content))

    for i in content:
        print(i)

print('*' * 20)

# 使用readline
with open('./hello.txt', 'r') as f:
    content = f.readline()
    print('类型:', type(content))

    for i in content:
        print(i)

6Hive读写文件流程 文件读写流程图_6Hive读写文件流程_05

文件写入

write()方法和writelines(seq)方法

这两个方式都是用于文件写入的。需要注意的是,他们写完后在文件末尾都不会写入换行符。

# 文件写入
with open('./hello.txt', 'a') as f:
    f.write('12345617777')
    f.writelines('I love you ! ')

print('*' * 20)

# 使用readlines读取
with open('./hello.txt', 'r') as f:
    content = f.readlines()
    for i in content:
        print(i)

6Hive读写文件流程 文件读写流程图_文件操作_06

可见不会自动加入换行符!

其他实用操作

在某些场景下,可能我们需要更加方便的处理文件,例如,当我们读取文件一半的时候,我们需要读文件的后面具体的某些内容,这时候,我们就需要移动文件的指针来读取了。当然,都不用担心,python 都提供了这些方法,下面就讲解这些方法。

这里需要介绍几个方法。

  • tell()
    返回文件游标操作的当前位置,以文件的开头为原点。
  • seek(offset[,whence])
    移动指针方法。
    offset :开始的偏移量,也就是代表需要移动偏移的字节数
    whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

实践是检验真理的唯一标准

例如,我们不从文件开头读取,从10个文字后开始读取

with open('./hello.txt', 'r') as f:
    f.seek(10, 0)
    print('当前位置:', f.tell())
    content = f.read()
    print(content)

6Hive读写文件流程 文件读写流程图_python_07

最后再讲两个函数。

  • flush()
    把缓冲区的内容写入硬盘。
  • truncate()
    把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。

三、文件关闭

文件关闭是指,在文件操作完成之后,需要关闭。其实,看完前面的内容,文件关闭似乎不太重要了。那么如何使用呢,非常简单。

文件对象.close()
# 新建打开文件操作,打开文件hello.txt,以读取的模式打开
f = open('./hello.txt', 'r')
f.close()

文件操作的内容就这么多了!!!over!