十九、文件的操作
-
文件操作的初识
-
文件操作的读
-
文件操作的写
-
文件操作的追加
-
文件操作的其他模式
-
文件操作的其他功能
-
打开文件的另一种方式
-
文件操作的改
-
文件操作的初识
-
原来是借助软件去操作文件
-
现在利用Python代码写一个很low的软件,去操作文件
-
文件路径
-
打开方式:读,写,追加,读写,写读....
-
编码方式:utf-8,gbk,gb2312.....
f1 = open('d:\好.txt',encoding='utf-8',mode='r')
content = f1.read()
print(content)
f1.close()#代码解释:
open 内置函数,open底层调用的是操作系统的接口。
f1,变量,f1,fh,file_handler,f_h,文件句柄。 对文件进行的任何操作,都得通过文件句柄. 的方式。
encoding:可以不写,不写参数,默认编码本:操作系统的默认的编码
windows: gbk。
linux: utf-8.
mac : utf-8.
f1.close() 关闭文件句柄。
-
-
报错原因:
-
UnicodeDecodeError:文件储存时与文件打开时编码运用不一致
-
第二个错误:路径分隔符产生的问题
r'C:\Users\oldboy\Desktop\主妇空姐模特联系方式.txt'
解决方式:在C:\后面再加个\
-
-
-
文件操作的读
r ,rb ,r+ ,r+b
r:read()** read(n) readline() readlines() for
rb:操作的是非文本的文件。图片,视频,音频
# 在同一路径下创建一个叫读的练习的txt文本
# 文本内容为:
反反复复
实实在在
多多少少
千千万万
染发广播
# read 全部读出来 **
f = open('读的练习',encoding='utf-8',mode='r')
content = f.read()
print(content,type(content))
f.close()
#结果为:
反反复复
实实在在
多多少少
千千万万
染发广播
<class 'str'>
# read(n) 按照字符读取
f = open('读的练习',encoding='utf-8',mode='r')
content = f.read(6)
print(content)
f.close()
#结果:(注意,换行也算一个字符)
反反复复
实
# readline()
f = open('读的练习',encoding='utf-8',mode='r')
print( f.readline())
print( f.readline())
f.close()
#结果:
反反复复
实实在在
# readlines() 返回一个列表,列表中的每个元素是源文件的每一行。
f = open('读的练习',encoding='utf-8',mode='r')
print( f.readlines())
f.close()
#结果:['反反复复\n', '实实在在\n', '多多少少\n', '千千万万\n', '染发广播\n']
f = open('读的练习',encoding='utf-8',mode='r')
l1 = f.readlines()
for i in l1:
print(i)
f.close()
#利用for循环,把列表元素一个个显示
#但是如果文本内容太多,则一次性全读出来会很占用内存,所以利用for来读取,for遍历句柄f的时候,是一行一行的读,读完一行,内存消失此行,读下一行,这样就不会占用太多内存
# for 读取 ***
f = open('读的练习', encoding='utf-8')
# ['反反复复\n', '实实在在\n', '多多少少\n', '千千万万\n', '染发广播\n']
for line in f:
print(line)
f.close()
#rb:操作的是非文本的文件。图片,视频,音频
f = open('壁纸1.jpg',mode='rb')
content = f.read()
print(content)
f.close() -
文件操作的写
w ,wb ,w+ ,w+b
w:文件不存在,则创建文件写入;如果文件存在,先清空,后写入
wb:操作的是非文本的文件。图片,视频,音频
以rb的模式将一个图片的内容以bytes类型全部读取出来,然后在以wb将全部读取出来的数据写入一个新文件,这样就完成了类似于一个图片复制的流程
#w:文件不存在,则创建文件写入;如果文件存在,先清空,后写入
#文件不存在,则创建文件写入
f = open('文件的写',encoding='utf-8',mode='w')
f.write('随便写一点')
f.close()
#结果是在路径下创建了一个新的叫文件的写的txt文件,里面的内容是随便写一点
#文件存在,先清空,后写入
f = open('文件的写',encoding='utf-8',mode='w')
f.write('python真......')
f.close()
#文件的写的txt文件存在,先清空里面的内容,然后写入内容python真......
#wb:操作的是非文本的文件。图片,视频,音频
f = open('壁纸1.jpg',mode='rb')
content = f.read()
f.close()
f1 = open('壁纸2.jpg',mode='wb')
f1.write(content)
f1.close()
-
文件操作的追加
a,ab,a+,a+b
a:没有文件,就创建文件追加内容;有文件,则在原文件追加内容
# 没有文件创建文件,追加内容
f = open('文件的追加',encoding='utf-8',mode='a')
f.write('taibai niu 13')
f.close()
#在路径下创建了一个叫文件的追加的txt文件,并加入内容taibai niu 13
# 有文件,在原文件的最后面追加内容。
f = open('文件的追加',encoding='utf-8',mode='a')
f.write('大壮,舒淇,b哥,雪飞')
f.close()
#结果:taibai niu 13大壮,舒淇,b哥,雪飞
-
文件操作的其他模式
r+:读写:读并追加,顺序不能错
# 读并追加 # 顺序不能错误。
f = open('文件的读写',encoding='utf-8',mode='r+') #只要不是写模式,就不能创建新的文件
content = f.read()
print(content)
f.write('人的一切痛苦,本质都是对自己无能的愤怒。')
f.close()
#结果显示文件的内容,打开文件,最后追加内容人的一切痛苦,本质都是对自己无能的愤怒。
# 错误示例:(不能先写在读,会报错)
f = open('文件的读写',encoding='utf-8',mode='r+')
f.write('人的一切痛苦,本质都是对自己无能的愤怒。')
content = f.read()
print(content)
f.close()
-
文件操作的其他功能
总结:
三个大方向:
读,四种模式:r ,rb ,r+ ,r+b
写,四种模式:w ,wb ,w+ ,w+b
追加,四种模式:a,ab,a+,a+b
相应的功能:对文件句柄的操作:read read(n) readline() readlines() write
tell:获取光标的位置,光标的单位是字节
seek:调整光标的位置
flush:强制刷新,保存
# tell 获取光标的位置 单位字节。
f = open('文件的读写',encoding='utf-8')
print(f.tell()) #光标初始位置
content = f.read()
print(f.tell()) #读完成后光标的位置
f.close()
# seek 调整光标的位置
f = open('文件的读写', encoding='utf-8')
f.seek(7)
content = f.read()
print(content)
f.close()
#比如文件内容是 大asdsa大,f.seek(7)后结果为:a大,说明光标移动到a大前边
# flush 强制刷新(相当于在写时候强制给保存)
f = open('文件的其他功能', encoding='utf-8',mode='w')
f.write('fdshdsjgsdlkjfdf')
f.flush()
f.close()
-
打开文件的另一种方式
-
with open()
优点1,不用手动关闭文件句柄
优点2,可同时操作多个句柄
缺点:待续
# 优点1: 不用手动关闭文件句柄
with open('文件的读',encoding='utf-8') as f1:
print(f1.read())
# 优点2,可同时操作多个句柄
with open('文件的读', encoding='utf-8') as f1,\
open('文件的写', encoding='utf-8', mode='w')as f2:
print(f1.read())
f2.write('hfdsjkghkajhsdjg')
# 缺点:待续。
-
-
文件操作的改
文件操作改的流程:
-
以读的模式打开原文件
-
以写的模式创建一个新的文件
-
将原文件的内容读出来修改成新内容,写入新文件
-
将原文件删除
-
将新文件重命名成原文件
具体代码:
# low版:
import os
# 1, 以读的模式打开原文件。
# 2,以写的模式创建一个新文件。
with open('alex自述',encoding='utf-8') as f1,\
open('alex自述.bak',encoding='utf-8',mode='w') as f2:
# 3,将原文件的内容读出来修改成新内容,写入新文件。
old_content = f1.read()
new_content = old_content.replace('alex','SB')
f2.write(new_content)
os.remove('alex自述')
os.rename('alex自述.bak','alex自述')
#进阶版:(会默写)
import os
with open('alex自述',encoding='utf-8') as f1,\
open('alex自述.bak',encoding='utf-8',mode='w') as f2:
for line in f1:
new_line = line.replace('SB','alex')
f2.write(new_line)
os.remove('alex自述')
os.rename('alex自述.bak','alex自述')
-
-
-
打开文件 open()
-
操作文件(文件句柄进行操作)
-
关闭文件
-
文件路径path,编码方式:encoding,mode
-
-
读,写,追加
-
读:r,rb,r+,r+b
-
read()
-
read(n)
-
r:read(n) n是字符
-
rb:read(n) n是字节
-
-
readline()
-
readlines() ['第一行\n','第二行\n']
-
for循环 对文件句柄
-
-
写:w,wb,w+,w+b
-
w:没有文件创建文件,写入新内容
-
w:有文件,先清空,在写入新内容
-
-
追加:a,ab,a+,a+b
-
w:没有文件创建文件,追加新内容
-
w:有文件,追加新内容
-
光标
-
-
-
r+:先读,后写
-
其他功能:tell() seek() flush()
-
with open() as f1:
-
不用手动关闭
-
可同时操作多个句柄
-
-
文件的改操作