八、文件的基本操作

1. 打开文件

open 内置函数(open底层调用的是操作系统的接口)

语法f = open('路径', encoding='编码', mode='模式')

  • f:变量名,文件句柄(命名:f_h、file_handler)
  • 路径:文件的地址,可能报错原因如下:
    • 文件名不能使用数字
    • 文件编码解码不一致
    • 路径的反斜杠与字母转义
      • 需要双反斜杠再转义
      • 字符串前加r,声明路径
  • encoding:指定打开编码,默认操作系统的编码
    • windows:gbk
    • linux:utf-8
    • mac:utf-8
  • mode:文件的打开方式,默认以读的模式

2. 文件的操作步骤

  1. 打开文件,并赋值给一个文件句柄
  2. 对文件句柄操作
  3. 关闭文件

注意:文件在同一目录下称相对路径,可仅输入文件名

f = open('H:\你好.txt', encoding='utf-8', mode='r')	# 打开文件
print(f.read())		# 输出读取的文件
f.close()			# 关闭文件

3. 文件操作模式

b(rb,wb,ab)模式:以bytes方式打开,操作非文本文件,读取到的内容是字节类型,写入时也需要提供字节类型(图片、视频、音频)不用加 encoding='utf-8'

r 读模式(默认)
  • r:读取
  • rb:以bytes模式读
  • r+:读取并追加(先读后写)
w 写模式

文件不存在,创建文件写入;文件存在,清空内容再写入

注意:文件没关闭前写入的每条都会存在,文件关闭后再重新再打开写入,才会覆盖

  • w:写入

  • wb:以bytes模式写入

  • w+:写入并读取(先写后读)

a 追加模式

文件不存在,创建文件写入;文件存在,在原文件的最后面追加内容

  • a:追加
  • ab:以bytes模式追加
  • a+:以读的方式打开,并将光标移到文件尾部

4. 文件操作的功能

  • 读取

    • 全读:read()
    • 指定读取字符数量:read(n)
      • 文件打开方式为文本模式时,代表读取n个字符
      • 文件打开方式为b模式时,代表读取n个字节
    • 读取一行:readine()(自带换行)
    • 返回列表:readlines()(列表中的每个元素是源文件的每一行)
    • for循环:每次循环读一行,在内存中只占一行的内存(大文件)
  • 写入write('内容')

  • 光标操作

    注意:隐藏的换行 /n 要占两个字节

    • 获取光标的位置:tell()(单位:字节)

    • 调整光标的位置:seek(偏移量,起始点)(单位:字节)

      • 偏移量:需要移动偏移的字节数,负数表示从倒数第几位开始
      • 起始点:表示要从哪个位置开始偏移,0表示从头,1表示当前位置,2表示结尾,默认值为 0

      返回值:操作成功,则返回新的光标位置;如果操作失败,返回 -1

  • 强制刷新flush() 一般情况下,文件关闭后会自动刷新缓冲区,但有时需要在关闭前刷新


copy工具

f = open('图1.jpg', mode='rb')    # 打开文件
content = f.read()    # 读取文件
f.close()			# 关闭文件
f1 = open('图2.jpg', mode='wb')  # 创建并写入
f1.write(content)     # 写入赋值,完成复制
f1.close()			# 关闭文件

5. 上下文管理

语法with open语句, open语句:

  • 可同时打开多个文件进行操作,以逗号分隔(\续航符)
  • 不用手动关闭文件句柄(一定时间自动关闭)
with open('文件的读',encoding='utf-8') as f1,\
        open('文件的写',encoding='utf-8',mode='w')as f2:
    data = f1.read()        # 读取
    f2.write(data)      	# 写入

6. 文件的改

原理

  1. 以读的模式打开原文件
  2. 以写的模式创建一个新文件
  3. 将原文件的内容读出来修改成新内容,写入新文件
  4. 将原文件删除
  5. 将新文件重命名成原文件
import os         # 导入os模块
with open('文件的改',encoding='utf-8') as f1,\
        open('文件的改.bak', encoding='utf-8', mode='w') as f2:
# 将原文件的内容读出来修改成新内容,写入新文件
    for line in f1:
        new_line = line.replace('SB', 'alex')
        f2.write(new_line)
os.remove('文件的改')		# 将原文件删除
os.rename('文件的改.bak', '文件的改')	# 将新文件重命名成原文件
posted @ 2020-04-04 16:13  今夜星河漫漫  阅读(192)  评论(0编辑  收藏  举报