@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()
- w模式下,只有打开文件的时候清空一次,如果打开文件之后进行多次写入,将以指针位置后开始写入,并不会每次写入都清空文件内容。
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.图片分享

评论