文件操作
1.流程:
打开文件 通过操作系统打开文件
open()
文件句柄: (优化内存)
一个句柄就是你给一个文件,设备,套接字(socket)或管道的一个名字, 以便帮助你记住你正处理的名字, 并隐藏某些缓存等的复杂性。
文件句柄,可迭代对象,保证程序操作的时候只有一行在运行,不是把所有数据放在内存中再做
2.read
python2
data=f.read(5) #从光标位置后读的字节
python3
data=f.read(5) #从光标位置后读的字符
3.readline和readlines
data = f.readline() #读一行再自动换行
data2 = f.readlines() #以列表形式全部读出来,但是以 连接
#readline和readlines做循环时用
4.关闭文件
close()
5.with
#为了避免打开文件后忘记关闭,可以通过管理上下文
with open("test6") as f: #f=open("test6")
6.写错做
f = open("test",mode="w",encoding="utf8") #写的时候在编码
f.write("hello world") #写入,如果有会覆盖,没有会直接创建
如果再加一个 f.write("hello world") #因为没到close的,所以不会覆盖,再添加
7.追加
f = open("test",mode="a",encoding="utf8")
f.write("hello world2")
8.flush刷新工作 (立刻存到硬盘里,不存在缓存里)
f = open("test",mode="w",encoding="utf8")
f.write(“hello test4”)
f(flush)
9.进度条
import sys
for i in range (100):
sys.stdout.write("#")
sys.stdout.flush()
import time
time.sleep(0.5)
####################
10.中间加字符
import sys
for i in range (100):
sys.stdout.write("#")
sys.stdout.flush()
import time
time.sleep(0.5)
11.查询功能,根据打印www.oldboy.org便能找到地址
defaults
log global
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
option dontlognull
listen stats :8888
stats enable
stats uri /admin
stats auth admin:1234
frontend oldboy.org
bind 0.0.0.0:80
option httplog
option httpclose
option forwardfor
log global
acl www hdr_reg(host) -i www.oldboy.org
use_backend www.oldboy.org if www
backend www.oldboy1.org
server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333
server 10.10.10.1 10.10.10.1 weight 22 maxconn 2000
server 2.2.2.4 2.2.2.4 weight 20 maxconn 3000
backend www.oldboy2.org
server 3.3.3.3 3.3.3.3 weight 20 maxconn 3000
backend www.oldboy20.org
server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333
while 1:
m =input('please input url:').strip()
l=[]
flag =False
with open("haproxy.conf",encoding="utf8") as f_read:
for line in f_read:
if line.startswith("backend") and m in line:
flag =True #flag 相当于一个开关
continue #下次再进来 if不满足了直接往下走判断
if line.startswith("backend") and flag: #开关关着的时候也不执行
break
if flag:
l.append(line)
for i in l:
print(i)
12. 可读可写模式(r+ w+ a+)
r+根据光标位置追加写
# r+根据光标位置追加写
f=open("test5",mode="r+",encoding="utf8")
print(f.read())
# w+首先会覆盖,再写
f=open("test5",mode="w+",encoding="utf8")
print(f.read())
f.write("where is you")
f.seek(0) #将光标移到开始位置,seek按字节走,不同于read()方法
f.seek(5)
f.tell() #显示在哪个字节
f.seek(1,1) #从当前字节开始读, 往后打一个字节单位
f.seek(-3,2) 从2(最后的位置)移动3个字节(负数往左移)
0表示从文件开头开始计算
f=open("test5","a+",encoding="utf8") #追加的时候光标位置默认在最后位置
f.seek(0)
print(f.read())
a+
文件不可修改,不管光标在哪里,都在最后的位置添加(追加写)
光标默认在最后,写的时候一定是追加写
读的时候seek调整
w+
先清空,再写(覆盖写),覆盖完了没有光标默认位置
读的时候按光标位置
r+
默认光标在最开始位置,只有读的时候再seek位置
写的时候追加写
13.r w a 基于字符操作的
seek的应用
断点续传,即rb wb ab 二进制操作
f=open("test5.tb,encoding="utf8")
f=open("test5","rb")
print(f.read())
f=open("test6","wb")
f.write("hello李杰".encode("utf8")) #自己调整字节
f.close()
f=open("test6","wb")
wb+
f.write(b"hello")
print(f.read())
f.seek(-1,2)
print(f.read())
14.
#
重新覆盖
15.
sys.stdout.write("#") #标准输出,跟print差不多
sys.stdout.flush() #文件句柄