一、文件打开操作
1.Python开发文件函数介绍
Python2中:open、file这两个函数用法一样。
Python3中:只有open函数。
2.打开文件操作流程
第一,打开文件得到文件对象。f=open('a.txt','w')
第二,通过文件对象操作文件(增删改查)。f.write('111111\n')
第三,关闭文件对象(clse)。 f.close()
f = open('a.txt') #如果不加读或者写参数默认是读
first_line = f.readline()
print(first_line)
f.close()
3.文件编码格式
如果不指定文件的打开编码encoding使用系统默认的编码格式windows是gbk,linux是utf-8
4.文件的几种打开模式
1.单一模式
- r ,只读模式:默认模式不加默认是r模式
- w,只写模式:写模式,清空文件内容并重写写入
- x, 只写模式:不可读;不存在则创建,存在则报错
- a, 追加模式:可读, 不存在则创建;存在则只追加内容
2.两种模式
"+" 表示可以同时读写某个文件
- r+, 读写:可读,可写
- w+,写读:可读,可写
- x+ ,写读:可读,可写
- a+, 写读:可读,可写
3.以字节的方式打来文件
- rb 或 r+b
- wb 或 w+b
- xb 或 w+b
- ab 或 a+b
二、文件打开函数
open(“文件”,“模式”,“编码”)
f = open('a.txt', encoding='utf-8', mode='r')
open参数
- encoding表示的是返回的数据采用何种编码,一般采用utf8或者gbk;
- mode文件打开模式,r、w、a为打开文件的基本模式,对应着只读、只写、追加模式;
三、操作
1.常用
读文档数据操作
f=open('a.txt','w')
f.write('111111\n')
f.close()
读文档操作
f=open('a.txt','r')
f.read('111111\n')
f.close()
一次读取多个文件
with open('a.txt','r',encoding='utf-8') as f,open('b.txt') as b_f:
print(f.read())
print('====>')
上下文管理
with open('a.txt','r') as read_f,open('b.txt','w') as write_f:
data=read_f.read()#先读出b文件内容
write_f.write(data)#在写入a文件
补充重要小知识点循环后边else用法
当循成功完成不被打断才会运行else内容
#for循环
for i in range(3):
print(i)
# continue
if i == 1:
break
else:
print('=============>') #当for循环不被break打断,就会执行else的代码
#while循环
i=0
while i< 5:
print(i)
i+=1
if i == 3:
break
else:
print('------>')
应用场景实例
with open('a.txt','r',encoding='utf-8') as read_f,\
open('aa.txt','w',encoding='utf-8') as write_f:
for line in read_f:
write_f.write(line)
else:
print('write successfull')
f.close()
# print(f.closed) #判断文件是否是关闭状态
# print(f.readable()) #判断文件是否是r模式打开的
# print(f.readline(),end='') #一次读一行
# print(f.readline())
# print(f.readline(),end='')
# print(f.readlines()) #读取所有行的内容,存成列表的形式
# f=open('a.txt','w',encoding='utf-8')
# # f=open('b.txt','r',encoding='utf-8') #以读的方式打开文件,文件不存在则报错
# f=open('b.txt','w',encoding='utf-8')
# # print(f.writable())
文件修改
#!/usr/bin/Python
# -*- coding:utf-8 -*-
import os
with open("a.txt","r",encoding="utf-8") as read_f,\
open("a.txt.awp","w",encoding="utf-8") as w_f:
for line in read_f:
print(line)
# if line.startswith("11"):
line = "1\n"
w_f.write(line)
os.remove("a.txt")
os.rename("a.txt.awp","a.txt")
光标位置
# with open('b.txt','rb') as f:
# f.read()
# f.seek(3) #默认情况,是以文件起始位置作为开始,往后移动3个bytes
# f.read(1)
# print(f.tell())
# f.seek(2,1) #1 代表以当前光标所在的位置为开始,往后移动2个 bytes
# print(f.tell())
# f.seek(-1,2) #2表以当前光标所在的位置为开始,往后移动2个 bytes
# print(f.tell())
# f.seek(0,2)
# tail -f access.log
import time
with open('access.log','r',encoding='utf-8') as f:
f.seek(0,2)
while True:
line=f.readline().strip()
if line:
print('新增一行日志',line)
time.sleep(0.5)
以二进制方式读取
#以二进制方式读
with open('a.txt','rb') as f:
print(f.read().dncode('utf-8'))#需要将二进制转换
#以二进制方式写
with open('c.txt','wb') as f:
f.write('哈哈哈'.encode('utf-8'))
f=open('sb.jpg','r',encoding='utf-8') #文本的方式读不了二进制文件
print(f.read())
应用:复制照片文件
# with open('sb.jpg','rb') as read_f,\
# open('sb_alex.jpg','wb') as write_f:
# data=read_f.read()
# write_f.write(data)
不常用的功能
# with open('a.txt','r',encoding='utf-8') as f:
# print(f.read(4)) #数字指的是读的是字符
#
# with open('a.txt','rb') as f:
# print(f.read(1)) #数字指的是读的是字符
# with open('a.txt','r',encoding='utf-8') as f:
# f.seek(3) #seek内指定的数字代表字节
# print(f.tell()) #当前光标所在的位置
# print(f.read())
# with open('aa.txt','r+',encoding='utf-8') as f:
# # f.seek(3) #seek内指定的数字代表字节
# # print(f.read())
#
# f.truncate(1)
# with open('b.txt','rb') as f:
# f.read()
# f.seek(3) #默认情况,是以文件起始位置作为开始,往后移动3个bytes
# f.read(1)
# print(f.tell())
# f.seek(2,1) #1 代表以当前光标所在的位置为开始,往后移动2个 bytes
# print(f.tell())
# f.seek(-1,2) #2表以当前光标所在的位置为开始,往后移动2个 bytes
# print(f.tell())
# f.seek(0,2)
# with open('c.txt','r',encoding='utf-8') as f:
# f.seek(0,2)
# print('====>',f.read())