@TOC

1.操作系统默认编码

  • windows:gbk
  • linux:utf-8
  • Mac-OS:utf-8

2.打开文件

f1 = open('read.txt', encoding='utf-8',mode='r')

f1变量称为文件操作句柄,通常以f1、file_handler、f_h等约定俗成形式存在。

打开文件默认模式为'r',省略mode参数以只读的形式打开该文件。

  • 文件打开之后必须要关闭:f1.close()。

3.文件的读:常用读模式 r,rb,r+,r+b……

  • 读取文件模式'r',mode='r',用于读取文本文件。

  • f1.read():整个文件全部一次性读出来。返回值是一个字符串。

  • f1.readline():按照一行一行读取。带有指针特性,下一次读取会接着上一行后开始读取。

  • f1.readlines():多行读取,返回一个列表,每个元素是文件中的一行。

  • ==★★★ for:以遍历文件句柄的方式循环读取全部文件内容,表现形式等于readlines()方法返回的列表。但有很大的不同,在读取大型巨型文件时候,read()和readlines()方法会直接将整个文件读取进电脑内存,这将会导致内存不足;而for循环读取大型文件时,单次循环时间内只有文件内的一行内容占用内存,进入下个循环即释放上一行内容。==

    f1 = open('文件的操作练习.txt', mode='r', encoding='utf-8')
    for line in f1:
    print(line, end='')
    f1.close()
    
  • 读取文件模式'rb',mode='rb',用于读取非文本文件。

  • 使用方法与'r'模式一样,

    f1=open('1寸照片.jpg',mode='rb')  # 不需要加编码模式
    print(f1.read())
    f1.close()
    

    4.文件的写:常用写模式 w,wb,w+,w+b

  • w写模式:mode='w',用于写入本文文件。

  • f1.write()方法:没有文件时候创建一个文件,如果文件存在就”先清空再写入“内容。

    • w模式下,只有打开文件的时候清空一次,如果打开文件之后进行多次写入,将以指针位置后开始写入,并不会每次写入都清空文件内容。
      f1 = open('文件的写练习.txt', mode='w', encoding='utf-8')
      f1.write('三好学生就是我')
      f1.close()
      
  • wb写模式:mode='wb',用于写入非文本文件。

  • 可以使用rb形式读取非文本文件,用wb写入到一个新文件里。

    f1 = open('cat.jpg', mode='rb')
    photo=f1.read()
    f1.close()
    

f2=open('cat1.jpg',mode='wb')
f2.write(photo)
f2.close()

# 5.文件的追加:常用模式 a,ab,a+,a+b

**- a 追加模式:mode='a',用于追加写入文本文件。**
如果指定文件不存在,则先创建文件;如果指定文件已经存在,则直接追加内容。
每次追加并不会自动换行,需要手工添加换行符'\n'

f1=open('文件的追加',mode='a',encoding='utf-8')
f1.write('情景剧剧本《爱的守护》')
f1.close()

# 6.文件操作的其他模式:r+,w+

- **r+ 模式:读写,先读后追加。
该操作对象需要已经存在,不存在指定文件将报错。
写操作时,是在文件指针位置开始写入,并不是清空再写。
操作文件指针方法:f1.seek(),指定文件指针所在位置。**

f1=open('文件的追加',mode='r+',encoding='utf-8')
print(f1.read())
f1.write('\n文件的读写操作')
print(f1.read())
f1.close()

# 7.文件操作的其他功能
- **对文件句柄的常用操作:read()、read(n)、readline()、readlines()、write……**
- **获取当前文件操作句柄的指针的位置:f1.tell(),返回值是以字节为单位计算的整数。**
- **调整当前文件操作句柄的指针位置:f1.seek(),括号中填写整数,以字节为单位计算。**
- **强制刷新文件:f1.flush(),将缓存中的数据立刻写入文件,同时清空缓存,一般用于close()方法之前,作用为关闭文件前将缓存写入文件。**

# 8.打开文件的另一种方式

- with open()方法:
  - 优点一:不用手动关闭文件句柄,它会在结束操作之后的一定时间内关闭。
  - 优点二:一个with可以打开多个文件进行操作

太长语句换行可以直接使用''符号,解释器在一个语句里遇到这个符号就会知道这行没有结束。

with open('文件的追加',mode='r',encoding='utf-8') as f1,\

    open('文件的操作练习.txt',encoding='utf-8') as f2:
print(f1.read())
print(f2.name)
# 9.文件的修改操作
- **文件修改的标准步骤:**
  - **以读的模式打开原文件。**
  - **以写的模式创建一个新文件。**
  - **将原文件的内容读出来修改成新内容,写入新文件。**
  - **将原文件删除。**
  - **将新文件重命成原文件。**

` 一次性读取到内存,进行替换内容修改:`

import os
with open('文件的操作练习.txt',encoding='utf-8') as f1,\

open('文件的操作练习.bak',mode='w',encoding='utf-8') as f2:
old_file=f1.read()
new_file=old_file.replace('Mr.H','H.X')
f2.write(new_file)

os.remove('文件的操作练习.txt')
os.rename('文件的操作练习.bak','文件的操作练习.txt')

`使用for循环读取文件内容进行修改 `

with open('文件的操作练习.txt',encoding='utf-8') as f1,\

open('文件的操作练习.bak',mode='w',encoding='utf-8') as f2:
for line in f1:
    new_line=line.replace('amwkvi','Mr.H')
    f2.write(new_line)

os.remove('文件的操作练习.txt')
os.rename('文件的操作练习.bak','文件的操作练习.txt')

# 10.图片分享
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4ff16280ba0357fb95633929d79c72b5.jpeg#pic_center)