文件处理
文件操作初识
文件路径:d:ake.txt
编码方式:utf-8,gbk,GB2312....
操作方式:只读,只写,写读,读写,追加 等。
报错原因:
UnicodeDecodeError: 'gb2312' codec can't decode byte 0xa6 in position 2: illegal multibyte sequence
编码不一致,存储文件时编码与打开文件时编码不一致。
r'd:\ake.txt ‘ 路径问题
1,在路径的最前面,+ r
2,每个\ 变成 \\
绝对路径: d:\ake.txt 从根目录开始找
相对路径: 当前目录,当前文件夹。
读:
r 只读模式
read 一次性都读出来
f =open("ake",encoding="utf-8",mode="r")
content = f.read(5) # 读取文件里的5个字符
print(content)
f.close()
readline 按行读取
f = open("ake",encoding="utf-8",mode="r")
print(f.readline()) # 打印第一行字符串
f.close()
readlines 按行读出来,并将其放在一个列表中
f = open("ake",encoding="utf-8",mode="r")
content = f.readlines()
for i in range(len(content)): # 循环列表
content[i] = content[i].strip() # 通过索引去掉每个元素的空格跟换行符
print(content)
f.close()for循环
f = open("文件操作1",encoding="utf-8")
for i in f:
print(i.strip())
f.close()
r+ 读写模式
rb 文件凡是操作带b字母,都是与非文字类文件相关的
f = open(r"D:\Qishijihua\视频\day08\day08\美女1.jpg",mode="rb") # r 为转义字符
content = f.read()
print(content)
f.close()
f = open("文件操作1",encoding="utf-8",mode="r+")
content = f.read() # 先读
print(content)
f.write("666") # 再写
f.close()
# 如果不读直接写会覆盖
写
w 写模式,没有文件创建文件也要写
wb 非文字类写入
w+ 读写,先读后写
w
f = open("种子.txt",encoding="utf-8",mode="w")
f.write("www.hao123.com")
f.close()
wb
f = open(r"D:\Qishijihua\视频\day08\day08\美女1.jpg",mode="rb")
content = f.read()
print(content)
f1 = open("美女2.jpg",mode="wb")
f1.write(content)
f.close()
f1.close()
w+
f = open("ake",encoding="utf8",mode="w+")
f.write("我爱python")
content = f.read()
print(content)
f.close()
追加
a 没有文件创建文件也要写。有文件直接在文件后面追加
a+ 写读
a
f = open("文件操作",encoding="utf-8",mode="a")
f.write("\n我爱北京天安门")
f.close()
a+
f = open("文件操作",encoding="utf-8",mode="a+")
content = f.write("\n天安门上太阳升")
print(content)
f.close()
改
1,以读的模式打开原文件,产生一个文件句柄f1.
2,以写的模式创建一个新文件,产生一个文件句柄f2.
3,读取原文件内容,进行修改,并将修改后的写入新文件。
4,将原文件删除。
5,将新文件重命名成原文件。
import os
with open('ake','r',encoding='utf-8') as f1,\
open("ake.bak",'w',encoding='utf-8') as f2:
con=f1.read()
new_con=con.replace("的",'得')
f2.write(new_con)
os.remove("ake")
os.rename('ake.bak','ake')
import os
with open('alex.txt','r',encoding='utf-8') as f14,\
open('alex.bak','w',encoding='utf-8') as f15:
for line in f14:
line.replace('alex','SB')
f15.write(line)
os.remove('alex.txt')
os.rename('alex.bak','alex.txt')
其他方法:
1,seek 调整光标,seek(0)调整到开始,seek(0,2)调整到结尾。按字节移动
2,readale 是否可读
3,writable 是否可写
4,with 主动关闭文件句柄
5,os.remove 删除文件名
6,os.rename 修改文件名
7. truncate 截取
r+ a+ ..不能在w模式下使用,对原文件进行截取
f=open('ake','r+',encoding='utf-8')
f.truncate(9) #字节
f.close()
来源:https://www.cnblogs.com/hanayo/p/9478153.html