python文件操作

python文件操作

Open方法

返回的是一个文件的句柄,一个file对象
open(file, mode=’r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True):
file: 代表文件的路径
mode: 是代表文件的操作模式 r w b + t 等等
buffering:0,1,>1三个,0代表buffer关闭(只适用于二进制模式),1代表line buffer(只适用于文本模式),>1表示初始化的buffer大小;
encoding: 指定返回的数据采用何种编码
errors: strict,ignore,当取strict的时候,字符编码出现问题的时候,会报错,当取ignore的时候,编码出现问题,程序会忽略而过,继续执行
newline: 读取的时候->不指定newline默认开启Universal new line mode,其实就是相当于python2中rU模式,也就是文件无论是windows下的换行符”\r\n”还是linux下的”\n”都会被转换为”\n”
写入的时候->不指定newline会根据当前系统的默认换行符进行写入
closefd:默认是为True,参数中的file此时是传入文件的路径,如果设置成False那么只能接受fd

mode type desc
r 读取文件,如果文件不存在抛错
w 写入文件,如果文件不存在则新建,如果存在会把文件清空以后再进行写入
w+ 先重写后再读取文件
r+ 先读取文件在重写文件,这个不是追加
a 追加写入文件
a+ 追加写入的同时进行读取
rb/wb/ab 以二进制模式读取或者写入追加文件,这个不是说把一个普通的txt文件变成一个二进制的文件,而是以二进制的方式进行操作文件

rb/wb/ab/这种模式非常时候在socket进行数据传输的时候使用,在python中recv和send 只能发送字节而不是字符串,需要使用bytes()方法对字符串进行转换,在传输文件时,如果直接以rb的模式进行读取,就不需要再用刀bytes()

使用open()进行操作文件,返回file对象

1
f = open('test.log','r')

file对象read,readline,readlines

f.read()方法会读取所有的数据为字符串,如果指定f.read(1024) 读取1024个字节
f.readline()读取一行数据,f.readlines()读取所有的数据放入一个list

file对象write,writelines

f.write(str)方法把str类型的数据写入文件,而f.writelines()可以把一个list写入文件

file对象tell和seek

f.tell() 返回当前指针的位置,这个不是行号,是指针位置
f.seek(offset,whence)从文件中移动off个操作标记(文件指针),正往结束方向移动,负往开始方向移动,如果设定了whence参数,就以whence设定的起始位为准,0代表从头开始,1代表当前位置,2代表文件最末尾位置。
通过socket进行传输的时候,为了实现断点续传就可以用到seek()来实现:

file对象的close()

打开文件就要关闭,访问数据库以后也要关闭连接,访问一个url,也要结束

1
2
3
4
# 打开文件-读取-关闭
f = open('a.log','r')
data = f.read()
f.close()

1
2
3
4
# 采用with方法,无需手动f.close()
data = None
with open('a.log','r') as f:
data = f.read()
linecache模块读取文件

linecache 模块源码没有太多代码,其实就是读取文件缓存,直接返回的是文件里面的数据内容,而不是像open()方法返回一个文件句柄,然后还要关闭他
linecache 目的只是快速读取文件使用,他是不需要close(),linecache 模块没有使用到生成器,不适合读取大文件,从文件读取内容直接放到内存中,

1
2
3
4
5
6
import linecache
a = linecache.getlines('a.log') # 直接把文件a.log文件里面所有内容读取出来,返回的是list,其实他底层就是调用了f.readlines()
a = liencache.getines('a.log',4) # 直接读取a.log文件4行内容,从开头读,没有操作文件指针的方法
linecache.checkcache('a.log') # 检测a.log是否被更新,
linecache.updatecache('a.log') # 当a.log被更新了,之前getlines的内容是不会发生变化的,使用updatecache就会读取新的a.log内容
linecahe.clearcache() # 释放缓存,毕竟是把文件读取的内存当中,
文章目录
  1. 1. python文件操作
    1. 1.1. Open方法
      1. 1.1.1. file对象read,readline,readlines
      2. 1.1.2. file对象write,writelines
      3. 1.1.3. file对象tell和seek
      4. 1.1.4. file对象的close()
    2. 1.2. linecache模块读取文件