文件I/O简介

  • IO是两个单词的缩写,分别是Input和Output,输入和输出
  • IO包含控制台IO以及文件IO

文件I/O的基本流程

  • 打开文件
  • 文件读写
  • 关闭文件

    打开文件

    使用open函数,可以打开一个已经存在的文件,或者创建一个新文件
    1. f = open(文件名,访问模式)
    2. 文件名:文件的相对路径或者绝对路径
    3. 访问方式:文件的访问方式有读、写、追加
    访问模式对应的功能如下:
功能 r r+ w w+ a a+
+ + + +
+ + + + +
创建 + + + +
覆盖 + +
指针在开始 + + + +
指针在结尾 + +

打开文件

  1. f = open('a.txt')

如果没有传入打开模式,默认访问模式为r只读模式

关闭文件

读取或写出文件后,要使用close()方法关闭文件

  1. f.close()

注意:
一定要保证文件操作完之后要关闭掉,因为程序能打开的文件数量是有上限的,并且不关闭文件会造成内存泄漏

文件读取

read

read方法读取,格式为:

  1. f = open('a.txt', "r")
  2. data = f.read(num) # 参数num: 默认-1,读取整个文件内容。可以指定num,读取num个数据
  3. f.close()

读取整个文件内容

  1. result = f.read()

读取5个数据

  1. result = f.read(5)

readline

readline指的是读取一行

  1. result = f.readline()

也可以指定读取一行的n个字符的数据

  1. result = f.readline(15)

readlines

readlines指的是读取整个文件,返回每一行数据的列表

  1. result = f.readlines()

文件写入

write

write写入字符串到文件中

  1. f = open('test.txt','w')
  2. f.write('hello world')
  3. f.close()

writelines

writelines可以将容器中数据写入到文件中

  1. lst = ['bill','gates','tom']
  2. f = open('test.txt','w')
  3. # 将列表中数据写入到文件中
  4. f.writelines(lst)
  5. f.close()

使用with

在处理文件对象时,最好使用 with 关键字。优点是,子句体结束后,文件会正确关闭,即便触发异常也可以。而且,使用 with 相比等效的 try-finally 代码块要简短得多:

  1. # 读文件
  2. with open('workfile.txt', encoding="utf-8") as f:
  3. read_data = f.read()
  4. with open('test.txt','w') as f:
  5. f.write('hello world')
  6. print(f.closed) # True

我们可以通过如下代码验证文件是否已经关闭:

  1. f.closed

如果没有使用 with 关键字,则应调用 f.close() 关闭文件,即可释放文件占用的系统资源。

警告: 调用 f.write() 时,未使用 with 关键字,或未调用 f.close(),即使程序正常退出,也 可能 导致 f.write() 的参数没有完全写入磁盘。

通过 with 语句,或调用f.close()关闭文件对象后,再次使用该文件对象将会出现异常。

常见乱码对照表

常见编码_乱码问题表.jpg

绝对路径和相对路径

文件路径分为两种:绝对路径 相对路径

绝对路径

绝对路径指的是在电脑硬盘上真正保存的路径,绝对路径在不同的操作系统上写法是不一样的
如下就是绝对路径写法:

  1. D:\codespace\python\FristPython\a.txt

绝对路径的缺点:

  1. 绝对路径写起来比较麻烦
  2. 如使用的项目文件移动了,那绝对路径就变化了,就需要重新修改

    相对路径

    相对路径就是相对于当前目录的路径。相对路径用./代表当前目录,使用**../**代表上一级目录。如果是当前路径可以省略**./**
    例如当前文件夹下的a.txt
    1. ./a.txt
    2. # 简写
    3. a.txt
    上一级目录下的b.txt
    1. ../b.txt