一 文件操作
1 文件路径
2 编码方式:utf-8
3 动作mode:读 ,读写,写读..
例子:第一种写法:
1 # f1 = open('D:\a.txt', encoding='utf-8', mode='r')
2 # content = f1.read()
3 # print(content)
4 # f1.close()
5
6
7 f1,文件句柄,文件对象,file,f_handle,file_handle,f_obj
8 open打开的指令,windows的指令,
9 windows 默认编码方式gbk,linux默认编码方式utf-8,mac utf-8。
10
11
12 1,打开文件,产生文件句柄。
13 2,操作文件句柄。
14 3,关闭文件。
第二种写法:
# with open('log1',encoding='utf-8',mode='r') as f1:
# print(f1.read())
# f1.close()
二 文件的打开模式
1 #1. 打开文件的模式有(默认为文本模式):
2 r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
3 w,只写模式【不可读;不存在则创建;存在则清空内容】
4 a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】
5
6 #2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
7 rb
8 wb
9 ab
10 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
11
12 #3,‘+’模式(就是增加了一个功能)
13 r+, 读写【可读,可写】
14 w+,写读【可写,可读】
15 a+, 写读【可写,可读】
16
17 #4,以bytes类型操作的读写,写读,写读模式
18 r+b, 读写【可读,可写】
19 w+b,写读【可写,可读】
20 a+b, 写读【可写,可读】
1 r+详细解释:读写
下面这个是新写入的东西不会被打印出来
1 # f1 = open('log1', encoding='utf-8', mode='r+')
2 # print(f1.read())
3 # f1.write('666')
4 # f1.close()
这个是可以打印出来刚写完后的内容
# f1 = open('log1',encoding='utf-8',mode='r+')
# f1.seek(0,2) ##把光标调整到最后,然后再去写,原来的内容不会被覆盖
# f1.write('aaaaaaaaaaaa')
# f1.seek(0) ##然后把光标调整到最前面,再去读
# print(f1.read())
# f1.close()
2 w只写,默认会清空之前的内容
# f1 = open('log2', encoding='utf-8', mode='w')
# f1.write('abc是披着高富帅外衣的纯屌丝.....')
# f1.close()
wb模式
# f1 = open('log2', mode='wb')
# f1.write('alex是披着高富帅外衣的纯屌丝.....'.encode('utf-8'))
# f1.close()
w+写读模式
1 # f1 = open('log2', encoding='utf-8', mode='w+')
2 # print(f1.read())
3 # f1.write('666')
4 # f1.close()
a追加和a+(可写,可读)
1 # f1 = open('log2', encoding='utf-8', mode='a')
2 # f1.write('\n老男孩')
3 # f1.close()
4
5 #a+可写可读
6 # f1 = open('log2', encoding='utf-8', mode='a+')
7 # f1.write('fdsafdsafdsagfdg')
8 # f1.seek(0)
9 # print(f1.read())
10 # f1.close()
三 文件的改
#1,打开原文件,产生文件句柄。
#2,创建新文件,产生文件句柄。
#3,读取原文件,进行修改,写入新文件。
#4,将原文件删除。
#5,新文件重命名原文件。
1 import os
2 with open('file_test', encoding='utf-8') as f1,\
3 open('file_test.bak', encoding='utf-8', mode='w') as f2:
4 for line in f1:
5 new_line = line.replace('SB','alex')
6 f2.write(new_line)
7 os.remove('file_test')
8 os.rename('file_test.bak','file_test')
四 文件的其他操作
#read read(n) readline() readlines() write() close readable writable


1 # read 全部读出
2 # f1 = open('log1', encoding='utf-8')
3 # content = f1.read() #
4 # print(content)
5 # f1.close()
6
7
8 #read(n)
9 # f1 = open('log1', encoding='utf-8')
10 # content = f1.read(5) # r 模式 按照字符读取。
11 # print(content)
12 # f1.close()
13
14 # f1 = open('log1', mode='rb')
15 # content = f1.read(3) # rb模式 按照字节读取。
16 # print(content.decode('utf-8'))
17 # f1.close()
18
19 #readline()按行读取 读几行,下面写几行
20 # f1 = open('log1', encoding='utf-8')
21 # print(f1.readline())
22 # print(f1.readline())
23 # print(f1.readline())
24 # print(f1.readline())
25 # f1.close()
26
27
28 #readlines() 将每一行作为列表的一个元素并返回这个列表
29 # f1 = open('log1', encoding='utf-8')
30 # print(f1.readlines())
31 # f1.close()
32
33
34 #for循环
35 # f1 = open('log1', encoding='utf-8')
36 # for i in f1:
37 # print(i)
38 # f1.close()
tell指针
1 #tell 告诉指针的位置
2 # f1 = open('log2', encoding='utf-8', mode='w')
3 # f1.write('fdsafdsafdsagfdg')
4 # print(f1.tell())
5 # f1.close()
6 #seek(参数),seek(0,2) 调至最后 按照字节去调整光标
五 编码转换
1 # s1 = b'\xd6\xd0\xb9\xfa'
2 # s2 = s1.decode('gbk')
3 # s3 = s2.encode('utf-8')
4 # print(s3) # b'\xe4\xb8\xad\xe5\x9b\xbd'
5 # s1 = b'\xd6\xd0\xb9\xfa'.decode('gbk').encode('utf-8')
6 # print(s1)