一、文件打开操作

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.单一模式

 

  1. r ,只读模式:默认模式不加默认是r模式
  2. w,只写模式:写模式,清空文件内容并重写写入
  3. x, 只写模式:不可读;不存在则创建,存在则报错
  4. a, 追加模式:可读, 不存在则创建;存在则只追加内容

  2.两种模式

 

  "+" 表示可以同时读写某个文件

 

  1. r+, 读写:可读,可写
  2. w+,写读:可读,可写
  3. x+ ,写读:可读,可写
  4. a+, 写读:可读,可写

  3.以字节的方式打来文件

 

  1. rb  或 r+b
  2. wb 或 w+b
  3. xb 或 w+b
  4. 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())