python-文件操作
第五章 文件操作
文件操作的初识:
-
文件路径:path
-
打开方式:读,写,追加,读写,写读等等
-
编码方式:utf-8,gbk,gb2312,建议用utf-8
5.1 文件的基本操作
-
打开文件 open()
-
对文件句柄的相应操作
-
关闭文件 close()
# 打开文件
f = open('log.txt',mode='r',encoding='utf-8')
# 读取文件(操作)
content = f.read()
print(content)
# 关闭文件
f.close()
obj = open('路径',mode='模式',encoding='编码')
obj.write()只写
obj.read()只读
obj.close()关闭文件
5.2 代码解释
'''
open()内置函数,open底层调用的是操作系统的接口
f1,变量,f1,fh,file_handler,f_h,文件句柄。 对文件进行的任何操作,都得通过文件句柄. 的方式。
encoding:可以不写,不写参数,默认编码本:操作系统的默认的编码
windows: gbk。
linux: utf-8.
mac : utf-8.
f1.close() 关闭文件句柄。
'''
5.3 打开模式【读,写,追加】
5.3.1 读 r ,r+ , rb ,r+b
-
rb:操作的是非文本的文件,图片,视频,音频
-
read()【只读(全部读取)】
obj = open('路径',mode='模式',encoding='编码')
obj.read()只读
obj.close()关闭文件
-
readline()【读取第一行,返回一个字符串】
obj = open('路径',mode='模式',encoding='编码')
obj.readline()
obj.readline()【一行一行读】
obj.close()关闭文件
-
readlines()【读取每一行,返回一个列表,列表中的每个元素是源文件的每一行。】
obj = open('路径',mode='模式',encoding='编码')
obj.readlines()
obj.close()关闭文件
f = open('文件的读', encoding='utf-8')
l1 = f.readlines()
for line in l1:
print(line)
# print(l1)
f.close()
-
read(n)【按字符读取】
f = open('文件的读', encoding='utf-8')
content = f.read(5) # 5个字符
print(content)
f.close()
-
rb
f = open('美女.jpg',mode='rb')
content = f.read()
print(content)
f.close()
obj = open('a.txt',mode='rb')
data = obj.read(1) # 1个字节
obj.close()
-
r+ 【可读可写】
-
读:默认从0的光标开始读,也可以通过 seek 调整光标的为位置。
-
写:从光标所在的位置开始写,也可以通过 seek 调整光标的位置。
-
读并追加 # 顺序不能错误。
f = open('文件的读写', encoding='utf-8', mode='r+')
content = f.read()
print(content)
f.write('人的一切痛苦,本质都是对自己无能的愤怒。')
f.close()
5.3.2 写 w,wb, w+,w+b
-
w+
-
读:默认光标永远在写入的最后或0,也可以通过 seek 调整光标的位置。
-
写:先清空。
# 没有文件,创建文件,写入内容
f = open('文件的写',encoding='utf-8',mode='w')
f.write('随便写一点')
f.close()
如果文件存在,先清空原文件内容,再写入新内容
f = open('文件的写',encoding='utf-8',mode='w')
f.write('太白最帅....')
f.close()
# wb
f = open('美女.jpg',mode='rb')
content = f.read()
# print(content)
f.close()
f1 = open('美女2.jpg',mode='wb')
f1.write(content)
f1.close()
5.3.3 追加
a, ab, a+,a+b 四种模式
a+
-
读:默认光标在最后,也可以通过 seek 调整光标的位置。然后再去读取。
-
写:永远写到最后。
# 读并追加 # 顺序不能错误。
# 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()
5.3.4 方法
-
tell()获取光标的位置 单位字节。
f = open('文件的读写', encoding='utf-8')
print(f.tell())
content = f.read()
# print(content)
print(f.tell())
f.close()
-
seek 调整光标的位置,无论模式是否带b,都是按照字节进行处理。
f = open('文件的读写', encoding='utf-8')
f.seek(7)
content = f.read()
print(content)
f.close()
-
flush 强制刷新,强制将内存中的数据写入到硬盘
f = open('文件的其他功能', encoding='utf-8',mode='w')
f.write('fdshdsjgsdlkjfdf')
f.flush()
f.close()
5.3.5 另一种打开方式
# 优点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')
-
缺点:这里要注意一个问题,虽然使用with语句方式打开文件,不用你手动关闭文件句柄,比较省事儿,但是依靠其自动关闭文件句柄,是有一段时间的,这个时间不固定,所以这里就会产生问题,如果你在with语句中通过r模式打开文件,那么你在下面又以a模式打开文件,此时有可能你第二次打开文件时,第一次的文件句柄还没有关闭掉,可能就会出现错误,他的解决方式只能在你第二次打开此文件前,手动关闭上一个文件句柄。
5.3.6 文件修改
-
文件操作改的流程: 1, 以读的模式打开原文件。 2,以写的模式创建一个新文件。 3,将原文件的内容读 出来修改成新内容,写入新文件。 4,将原文件删除。 5,将新文件重命名成原文件。
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
# 1, 以读的模式打开原文件。
# 2,以写的模式创建一个新文件。
with open('alex自述',encoding='utf-8') as f1,\
open('alex自述.bak',encoding='utf-8',mode='w') as f2:
# 3,将原文件的内容读出来修改成新内容,写入新文件。
for line in f1:
# 第一次循环 SB是老男孩python发起人,创建人。
new_line = line.replace('SB', 'alex')
f2.write(new_line)
os.remove('alex自述')
os.rename('alex自述.bak','alex自述')
# 有关清空的问题:
# 关闭文件句柄,再次以w模式打开此文件时,才会清空。
# with open('文件的写', encoding='utf-8',mode='w') as f1:
# for i in range(9):
# f1.write('恢复贷款首付款')

浙公网安备 33010602011771号