Loading

文件操作

【一】文本处理引入

  • 应用程序运行过程中产生的数据最先都是存放于内存中的
  • 若想永久保存下来,必须要保存于硬盘中。应用程序若想操作硬件必须通过操作系统
  • 而文件就是操作系统提供给应用程序来操作硬盘的虚拟概念
  • 用户或应用程序对文件的操作,就是向操作系统发起调用,然后由操作系统完成对硬盘的具体操作。

【二】文件操作的基本流程

【1】操作文件方式一:open语句

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

  • file: 必需,文件路径(相对或者绝对路径)。

  • mode
    可选,文件打开模式,默认为 'r' 表示读取。常用模式还包括:
    • 'r':读取(默认)
    • 'w':写入,并先截断文件
    • 'x':排他性创建,如果文件已存在则失败
    • 'a':写入,如果文件存在则在末尾追加
    • 'b':二进制模式
    • 't':文本模式(默认)
    • '+':更新(既可以读又可以写)

【2】操作方式二:with open 语句

(1)回收资源

  • 应用程序的变量f和操作系统打开的文件。
  • 在操作完毕一个文件时,必须把与该文件的这两部分资源全部回收
  • 回收方法为
f.close() # 回收操作系统打开的文件资源
del f	  # 回收应用程序级的变量
  • 其中del f一定要发生在f.close()之后
    • 否则就会导致操作系统打开的文件无法关闭,白白占用资源,
  • 而python自动的垃圾回收机制决定了我们无需考虑del f
    • 这就要求我们,在操作完毕文件后,一定要记住f.close()
  • 虽然我们如此强调,但是大多数读者还是会不由自主地忘记f.close()

(2)使用with语句改善文件操作

  • 使用open()时,通常需要确保文件最后被关闭。为了更加安全和便捷,可以使用with语句,它会自动帮你关闭文件。
# 读取文件
with open('example.txt', 'r') as file:
    content = file.read()
    print(content)

# 写入文件
with open('example.txt', 'w') as file:
    file.write('Hello, World!')

【3】指定操作文本文件的字符编码

  • f = open(...)是由操作系统打开文件
  • 如果打开的是文本文件,会涉及到字符编码问题
  • 如果没有为open指定编码,那么打开文本文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8。
  • 这就用到了上节课讲的字符编码的知识:若要保证不乱码,文件以什么方式存的,就要以什么方式打开。
f = open('a.txt','r',encoding='utf-8')

【三】文件的操作模式

  • 文件的操作模式定义了在打开文件时可以对文件执行哪些操作,比如读取、写入、追加等。下面是open()函数中使用的一些常见的文件模式:
  1. 'r' - 读取模式:
    • 默认模式。
    • 如果文件不存在,抛出异常。
    • 用于读取文件内容。
  2. 'w' - 写入模式:
    • 如果文件存在,会覆盖文件并从头开始写。
    • 如果文件不存在,创建新文件。
    • 用于写入新内容到文件,原有内容会被删除。
  3. 'x' - 排他性创建模式:
    • 如果文件已存在,抛出异常。
    • 如果文件不存在,创建新文件。
    • 用于当你想创建新文件时,确保文件名不与已存在的文件冲突。
  4. 'a' - 追加模式:
    • 如果文件存在,从文件末尾追加内容。
    • 如果文件不存在,创建新文件。
    • 用于在文件末尾添加新内容,不会覆盖现有内容。
  5. 'b' - 二进制模式:
    • 用来读或写二进制文件。
    • 通常与其他模式结合使用(如 'rb''wb')。
  6. 't' - 文本模式:
    • 默认的模式。
    • 用来处理文本文件。
    • 可以结合其他模式使用,例如 'rt''wt'
  7. '+' - 更新模式:
    • 用于读写。
    • 可以与其他模式结合使用,如 'r+''w+''a+',分别表示可读写的读取、写入、追加模式。

【四】文件的操作方法

  • 在Python中,读取文件涉及到打开文件、读取内容,以及关闭文件等步骤。以下是使用Python进行文件读取操作的一些常用方法:

【1】读操作

(1)read() 方法:

  • 读取整个文件内容,如果文件大则可能消耗大量内存。
  • 可以接受一个参数指定要读取的字符数。
with open('file.txt', 'r') as file:
    content = file.read()
    print(content)

(2)readline() 方法:

  • 一次读取一行。
  • 常用于循环中逐行读取文件内容。
with open('file.txt', 'r') as file:
    line = file.readline()
    while line:
        print(line.strip())  # 使用strip()去除换行符
        line = file.readline()

(4)readlines() 方法:

  • 一次读取整个文件所有行。
  • 返回一个列表,其中每个元素代表文件的一行。
with open('file.txt', 'r') as file:
    lines = file.readlines()
    for line in lines:
        print(line.strip())

【2】写操作

  • 在Python中,写入文件通常涉及打开文件、写入内容以及关闭文件等步骤。以下是使用Python进行文件写入操作的一些常见方法:

(1)write() 方法:

  • 将字符串写入文件。
  • 不会自动添加换行符,需要显式添加\n来换行。
with open('file.txt', 'w') as file:
    file.write('Hello, World!\n')

(2)writelines() 方法:

  • 用于向文件写入一个序列字符串列表,如果需要换行需要自己加入每行的换行符\n
  • 不会自动添加换行符。
lines = ['Hello, World!\n', 'Welcome to Python.\n']
with open('file.txt', 'w') as file:
    file.writelines(lines)

【3】判断文件是否可读/写/关闭

f.readable()
  • 文件是否可读
f.writable()
  • 文件是否可读
f.closed
  • 文件是否关闭
f.encoding
  • 如果文件打开模式为b,则没有该属性
f.flush()
  • 立刻将文件内容从内存刷到硬盘
f.name()
  • 获取文件的名字
with open('example.txt', mode='w', encoding='utf-8') as f:
    print(f"可读性: {f.readable()}")  # 输出: 可读性: False
    print(f"可写性: {f.writable()}")  # 输出: 可写性: True
    print(f"是否关闭: {f.closed}")  # 输出: 是否关闭: False
    print(f"编码格式: {f.encoding}")  # 输出: 编码格式: utf-8

    f.flush()  # 立即将内容刷新到硬盘

print(f"在 'with' 块之后是否关闭: {f.closed}")  # 输出: 在 'with' 块之后是否关闭: True
posted @ 2024-01-13 23:11  HuangQiaoqi  阅读(20)  评论(0编辑  收藏  举报