Python Day 2 文件操作

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)

文件的修改

  1. 加载到内存,在内存中修改,再写回源文件
  2. 打开一个文件,修改完了,再写到一个新文件中
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"))
posted @ 2017-07-10 21:59  AbyssCE  阅读(119)  评论(0编辑  收藏  举报