Python Day 2 文件操作/字符编码
1、文件操作
对文件的操作流程
1)打开文件,得到文件的句柄病赋值给一个变量
2)通过句柄对文件进行操作
3)关闭文件
基本操作
f=open("lyrics",encoding="utf-8")#将文件句柄赋值给f变量
first_lise=f.readline()
print("first line",first_lise)#读一行
print("--------------------------")
data=f.read()#读取所有剩下内容,文件大时不要用
print(data)
f.close()
f=open("lyrics",encoding="utf-8")#将文件句柄赋值给f变量
data=f.read()
data2=f.read()
print(data)
print("------------------------------------",data2)
打开文件模式
R:读模式
w:写模式,会创建一个文件,会覆盖之前的文件。慎用!
a:=append 追加,不能读
r+:读写模式,实质是用读和追加模式打开
w+:写读模式,不常用。创建新文件,然后写,同时可以读。
对源文件进行修改的话,只能覆盖,不能插入。
a+:追加读写
读取前5行
以下办法每次读完都要存放在内存中
f=open("lyrics2",'r',encoding="utf-8")
for i in range(5):
print(f.readline())
or
for line in f.readlines():
print(line.strip())
以下方法读完一行,释放一行
for line in f:
print(line.strip())
利用以上方法进行高效循环
f=open("lyrics2",'r',encoding="utf-8")#将文件句柄赋值给f变量
count=0
for line in f:
if count==9:
print("-------------")
count += 1
continue
count += 1
print(line.strip())
其他操作
f=open("lyrics2",'r',encoding="utf-8")#将文件句柄赋值给f变量
# **tell 按字符计数,显示当前字符位置**
print(f.tell())
print(f.read(5))
print(f.tell())
print(f.readline())
print(f.readline())
print(f.readline())
# **回到指定字符位置**
f.seek(0)
print(f.readline())
# **打印编码模式**
print(f.encoding)
print(f.seekable())#**可移动光标**
print(f.readable())#**可读**
print(f.writable())#**可写**
#**flush 刷新**
打印进度条
import sys,time
for i in range(20):
sys.stdout.write("#")
sys.stdout.flush()
time.sleep(0.5)
文件的修改
- 加载到内存,在内存中修改,再写回源文件
- 打开一个文件,修改完了,再写到一个新文件中
f=open("lyrics2","r",encoding="utf-8")
f_new=open("lyrics3","w",encoding="utf-8")
for line in f:
if "12" in line:
line=line.replace("12","1222222222")
f_new.write(line)
f.close()
f_new.close()
with 语句
with代码执行完毕时,内部会自动关闭并释放文件资源
with open("lyrics2","r",encoding="utf-8") as f:
2、字符及转码
- Python3中所有编码都需先转化为unicode。
- 在python2默认编码是ASCII, python3里默认是unicode
- 在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string
print(msg.encode("utf-8"))
print(msg.encode("gb2312").decode("gb2312").encode("utf-8"))