文件操作初识
-
文件操作步骤
- 打开文件
- 操作文件
- 关闭文件 f.close()
-
打开文件
f = open("文件路径",mode="文件操作模式",encoding="编码方式")
f 文件句柄
路径:绝对路径(从磁盘的根处查找)
相对路径(相对当前文件进行查找的),建议使用相对路径
import os print(os.getcwd())#查看当前工作路径
可通过源码显示方式填写路径,如下:
f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8")
可减少因路径中“”所造成的错误。
编码方式:win ——gbk
linux——utf-8
mac——utf-8
-
文件操作模式
3.1文本文件
r 读 读文件,都到哪,光标移动到哪,下次读就从光标位置开始
f.read() 一次全部读完整个文件,可按字符读取若文件太大会造成内存溢出
f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8") print(f.read()) 结果: 铁憨憨 血河大帝 碎小梦 龙吟
f.read(2) 读取前两个字符
f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8") print(f.read(2)) 结果: 铁憨
f.readline() 读取一行文件
f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8") print(f.readline()) 结果: 铁憨憨
f.readlines() 按行读取,存储到列表中
f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8") print(f.readlines()) 结果: ['铁憨憨 ', '血河大帝 ', '碎小梦 ', '龙吟']
通过for循环迭代,一行一行读取,防止内存溢出
f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8") for i in f: print(i) 结果: 铁憨憨 血河大帝 碎小梦 龙吟
w 写 清空写
若文件不存在先创建文件,在执行写操作;若文件存在,会先删除原文件中的内容在执行写操作。
a 追加写 写在文件末尾
f = open(r"E:python_workspaceday008顺火暖.txt",mode="a",encoding="utf-8") f.write("碎梦都是坑!") 文本中显示内容: 铁憨憨 血河大帝 碎小梦 龙吟碎梦都是坑!
r+ 读写 先读后写
f = open(r"E:python_workspaceday008顺火暖.txt",mode="r+",encoding="utf-8") f.read() f.write("会呼吸的江湖") 文件显示内容: 铁憨憨 血河大帝 碎小梦 龙吟碎梦都是坑!会呼吸的江湖
w+ 写读 先写后读,会先将原文件内容删除,然后写,最终读不到文件。是真的没用。
f = open(r"E:python_workspaceday008顺火暖.txt",mode="w+",encoding="utf-8") f.write("会呼吸的江湖") f.read() 结果: 无返回 文件显示内容: 会呼吸的江湖
a+ 追加写读 直接追加在文件末尾,直接读不出,需通过移动光标来完成读操作
f = open(r"E:python_workspaceday008顺火暖.txt",mode="a+",encoding="utf-8") f.write("会呼吸的江湖") f.seek(0) print(f.read()) 结果: 铁憨憨 血河大帝 碎小梦 龙吟碎梦都是坑!会呼吸的江湖
f.tell() 查看光标位置,按字节查看
f.seek(0,0) 移动光标到文件的开始位置,按字节移动
f.seek(0,1) 移动光标到光标的当前位置,按字节移动
f.seek(0,2) 移动光标到文件的末尾位置,按字节移动
3.2 非文本文件
rb 读 wb写 ab追加写 不能指定编码
import requests ret = requests.get("http://www.521609.com/uploads/allimg/151124/1-1511241G251317.png") f = open("2.jpg",mode="wb") f.write(ret.content) f.close()
-
另一种文件打开方式
with open("文件路径",mode="操作文件的方式",encoding="编码") as f:
上下文管理
1.可以自动关闭文件
2.可以同时打开多个文件with open("day8",mode="r",encoding="utf-8") as f, open("a",mode="w",encoding="gbk") as f1: print(f.read()) f1.write("真饿!")
-
文件的修改
with open("原文件")as f,open("新文件")as f1:
f.for循环的读取
f1.for循环的写入with open("day8",mode="r+",encoding="utf-8")as f: content = f.read() content = content.replace("您","你") f.seek(0,0) f.write(content)
import os
os.rename("原文件名字",备份名字") # 对原文件进行备份
os.rename("新文件名字","原文件名字") # 把新文件改成原文件的名字with open("day8",mode="r",encoding="utf-8")as f, open("new_day8",mode="a",encoding="utf-8")as f1: for i in f: content = i.replace("你","我") f1.write(content) import os os.remove("day8") # 原数据可以使用rename来做备份 os.rename("new_day8","day8")