第八章python基础之文件操作(基础六)
python的文件的读写通过python的open()函数来打开一个文件。
打开方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使⽤用的是r(只读)模式
8.1 文件初识
f = open("文件路径",mode="模式",encoding="编码")
open() 打开文件
open("文件的路径")
open(mode= "对文件的操作方式")
open(encoding="utf-8")
编码:win==>gbk,Linux==>utf-8,mac==>utf-8
f = pen()文件的句柄
open() # 调用操作系统打开文件
mode # 对文件的操作方式
encoding # 文件的编码集 -- 存储编码要统一,根据⽂文件的实际保存编码进⾏行行获取数据
8.1文件的读操作
文件全部读取完成以后,在次读取就没有内容
只读 r 模式:
f = open("a",mode="r",encoding="gbk")
content = f.read() # 全部读取
print(content)
c1 = f.read(3) # 字符读取
print(f.readline(3)) # 读取一行内容中多个字符
print(f.readlines()) # 一行一行读取,存储到列表中
是换行
print(f.read())
文件的路径与查找:
F:a111.txt 绝对路径 从磁盘的根处查找
相对路径 相对于当前文件进行查找的
import os
print(os.getcwd()) # 查看当前工作路径
print(repr("F:a文件初识.txt"))
print("F:a文件初识.txt")
文件的迭代读取
for i in f: # 迭代读取
print(i)
8.2 文件的写操作
文件写 w 模式:w清空写入,a 追加写在文本末尾添加
没有文件创建文件内容,有文件内容清空内容在写入
f = open("day8",mode="w",encoding="utf-8") #打开文件
f.write("123") #操作文件
f.close() # 关闭文件
f = open("a",mode="r",encoding="gbk")
print(f.read())
f.close() # 关闭文件后就不能继续读取了
写入文件内容:f.write("写入的内容")
f = open("a",mode="a",encoding="gbk")
f.write("啊啊啊,好困啊") #文件末尾添加
8.3文件的非文本读写操作
rb,wb,ab 不能指定编码
f = open("1.jpg",mode="rb") #打开图片格式文件
rb ,wb,ab 不能指定编码
print(f.read()) # read() 全部读取
print(f.read(3)) # 字节
通过requests模块爬取图片文件
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()
8.4文件的r+,w+,a+模式操作
r 读 r+ 读写
w 写 w+ 写读
a 写 a+ 写读
错误示范
f = open("day8",mode="r+",encoding="utf-8")
f.write("你好啊")
print(f.read())
正确示范 -- 后期开发中使用频率比较低
f = open("day8",mode="r+",encoding="utf-8")
print(f.read())
f.write("脑瓜疼啊脑瓜疼")
w+ 写读
f = open("day8",mode="w+",encoding="utf-8")
f.write("你您你你")
print(f.read())
a+ 追加
f = open("a",mode="a+",encoding="gbk")
print(f.tell()) # 查看的是字节
f.seek(0)
print(f.read(1)) # 字符
其他操作
查看光标: tell() 返回值 返回的就是当前光标的位置
移动光标::
seek(0,0) 文件开始位置
seek(0,1) 光标的当前位置
seek(0,2) 文件末尾位置
seek(3) 按照字节调节 使用utf-8是3 gbk是2
8.5文件的修改
with open("day8",mode="r+",encoding="utf-8")as f:
content = f.read()
content = content.replace("您","你")
f.seek(0,0)
f.write(content)
文件的修改:
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")
有问题用for循环批量修改文件需要修改的内容:
with open("day8",mode="r+",encoding="utf-8")as f:
for i in f:
content = i.replace("您","你")
f.seek((0,0))
f1.write(content)