0508Python基础-文件操作
0508Python基础-文件操作
1、文件操作初识
护士空姐学生少妇联系方式.txt
Python代码
path 文件路径:d:\护士空姐学生少妇联系方式.txt
encoding编码方式:utf-8,gbk....
mode 操作方式: 只读,只写,追加,读写,写读.....
路径:绝对路径:从根目录开始一直找到文件。
相对路径:从当前目录开始找到的文件。
错误原因分析:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 0: invalid start byte
编码错误:文件存储时编码方式与文件打开时的编码方式不一致。
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \uXXXX escape
两种:
第一种:加r
f1 = open(r'd:\u护士空姐学生少妇联系方式.txt', encoding='GB2312', mode='r')
print(f1.read())
f1.close()
第一种:加\
f1 = open('d:\\护士空姐学生少妇联系方式.txt', encoding='GB2312', mode='r')
print(f1.read())
f1.close()
可简写场景:
#凡是带b不用encoding
#只有是r模式 mode='r'可以省略不写
2、文件操作 r,w,a
读模式:
*r
read
read(n)
readline()
readlines()
for循环 最好的
rb
*r+
r+b
写模式:
*w
w:没有文件,创建文件写内容。
w:如果有文件,清空原文件,写入新内容。
wb
w+
w+b
追加模式
*a
a:没有文件,创建文件写内容。
a:如果有文件,最后面追加新内容。
ab
a+
a+b
补充:
gbk utf-8
对于字母,数字,特殊字符的编码都是引用ascii码,所以可以直接转化。
s1 = '123abc*'
b1 = s1.encode('utf-8')
s2 = b1.decode('gbk')
print(s2)
详细代码演示
f1 = open('d:\护士空姐学生少妇联系方式.txt',
encoding='GB2312', mode='r')
print(f1.read())
f1.close()
变量:f1_obj,f1_file,file,file_handle... 文件句柄。
open Python的内置函数,但是底层调用的windows系统的open功能,open功能就是操作文件用的。
windows系统默认的编码方式gbk,linux,macos:utf-8.
流程: 1打开文件,产生文件句柄。
2对文件句柄进行相应的操作。
3,关闭文件。
f2 = open('护士学生空姐班主任.txt', encoding='utf-8')
print(f2.read())
f1.close()
r rb
1,f.read() 全部读出来。
f2 = open('护士学生空姐班主任.txt', encoding='utf-8')
print(f2.read())
f2.close()
,2 f.read(n)
f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
print(f1.read(3))
f1.close()
r模式:read(n) n 是按照字符读取。
rb模式:read(n) n 是按照字节读取。
readline() 按行读取
f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
print(f1.readline())
print(f1.readline())
print(f1.readline())
print(f1.readline())
f1.close()
readlines() 返回一个list 里面的元素是每一行。
f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
print(f1.readlines())
for line in f1.readlines():
print(line)
f1.close()
for 循环去读取。
f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
for line in f1:
print(line)
f1.close()
rb模式 非文字类的文件
f1 = open('护士学生空姐班主任.txt',mode='rb')
print(f1.read(1))
f1.close()
r+ 读写,先读后写
f1 = open('护士学生空姐班主任.txt', encoding='utf-8', mode='r+')
print(f1.read())
f1.write('666')
f1.close()
r+b 读写,先读后写
f1 = open('护士学生空姐班主任.txt', mode='r+b')
print(f1.read())
f1.write('666'.encode('utf-8'))
f1.close()
w wb模式
w:没有文件,创建文件写内容。
w:如果有文件,清空原文件,写入新内容。
f1 = open('log1', encoding='utf-8', mode='w')
f1.write('老男孩是最好的培训学校...')
f1.close()
f1 = open('log1', encoding='utf-8', mode='w')
f1.write('法国进口分类结果')
f1.close()
wb
f1 = open('log2', mode='wb')
f1.write('法国进口分类结果'.encode('utf-8'))
f1.close()
w+ 先写后读
f1 = open('log1', encoding='utf-8', mode='w+')
f1.write('老老男孩.....')
f1.seek(0) # 调整光标
print(f1.read())
f1.close()
w+b
a ab
a:没有文件,创建文件写内容。
a+:有文件,直接在原文件的后面追加新内容。
f1 = open('log3', encoding='utf-8', mode='a')
f1.write('barry')
f1.close()
a+ 追加可读
f1 = open('log3', encoding='utf-8', mode='a+')
f1.write('范德萨急功近利开发工具')
f1.seek(0)
print(f1.read())
f1.close()
f1 = open('log3', mode='ab')
f1.write('中国'.encode('gbk'))
f1.close()
ps 非文字的文件的读取写入
f1 = open('11.jpg', mode='rb')
content = f1.read()
print(content)
f1.close()
f2 = open('小猪佩奇.jpg', mode='wb')
f2.write(content)
3、文件操作常用方法
read
write read(n) readline()
readlines() seek
readlable() writeable()判断是否可读或者可写
f1 = open('log1', encoding='utf-8')
print(f1.readable())
print(f1.writable())
f1 = open('log1', encoding='utf-8',mode='r+')
print(f1.readable())
print(f1.writable())
seek: 按照字节去调整光标
f1 = open('log1', encoding='utf-8')
f1.seek(3)
print(f1.read())
f1.close()
tell 告诉光标的位置
f1 = open('log1', encoding='utf-8')
print(f1.tell())
print(f1.read())
print(f1.tell())
f1.close()
truncate 对原文件进行截取内容,以字节形式,只能在a模式下使用。
f1 = open('log1', encoding='utf-8', mode='a')
f1.truncate(3)
f1.close()
文件操作的另一种写法
with open() as 不用主动关闭 f1.close()
同一open 可以操作多个文件
with open('log1', encoding='utf-8') as f1:
print(f1.read())
with open('log1', encoding='utf-8') as f1,\
open('log2',encoding='utf-8', mode='w')
as f2:
print(f1.read())
f2.write('666')
with open('log1', encoding='utf-8') as f1:
content = f1.read()
f1.close()
pass
with open('log1', encoding='utf-8',mode='w')
as f2:
f2.write('333')
4、文件的改。
1,打开原文件 old_file,将原内容读取到内存。
2,创建一个新文件new_file。
3,将原内容通过你改写形成新内容,写入到新文件。
4,将原文件删除。
5,将新文件重命名成原文件。
方法一,原文件内容不打,可以用此方法,但是此方法还是很low。
import os
with open('change', encoding='utf-8') as f1,\
open('change.bak', encoding='utf-8', mode='w') as f2:
old_content = f1.read()
new_content = old_content.replace('alex', 'SB')
f2.write(new_content)
os.remove('change')
os.rename('change.bak', 'change')
方法2
import os
with open('change', encoding='utf-8') as f1,\
open('change.bak', encoding='utf-8', mode='w') as f2:
for line in f1:
new_line = line.replace('SB', 'alex')
f2.write(new_line)
os.remove('change')
os.rename('change.bak', 'change')