Python文件操作

一、初识文件操作

使用python来读写文件是非常简单的操作,通常使用open函数打开一个文件,获取文件句柄。通过文件句柄可以进行各种操作,而根据打开文件模式的不同导致文件允许的操作也存在差异.

二、文本文件与二进制文件

文本文件和二进制文件只是文件的不同展示方式。

(1)本质上来看,所有文件都是二进制方式存储;

(2)文本文件是由单一特定编码组成的文件,例如utf-8编码;适用于例如.txt文件、.py文件;

(3)二进制文件由比特0和1组成,没有统一字符编码;适用于例如.png文件、.avi文件等;

三、打开文件模式

打开文件模式有:

(1)读模式(r,rb),以只读模式打开文件,文件指针放在文件开头,文件不存在则报错,系统默认以读模式打开文件;

(2)写模式(w,wb),打开一个文件只进行写入,不能进行读操作,原文件存在则覆盖原文件,文件不存在则新建文件;

(3)追加模式(a,ab),在原有文件上进行修改,也不能进行读操作;如果原文件存在,则文件指针放在文件结尾,文件不存在则新建文件。

(4)‘+’模式,与r/w/a同时使用,在原有基础上增加读写功能

备注:如果以二进制模式打开文件,需要在在原有模式下增加‘b’,通常用于图片或视频文件;

对于非二进制文件的读写操作,需要设置编码集,通常用utf-8;对于二进制文件,读取出来的数据是bytes类型, 在rb模式下.不能选择encoding字符集.

四、文件内容的读取

(1)f.read(size=-1):读入全部内容,如果给出参数,读入前size长度

(2)f.readline(size=-1):读入一行内容,如果给出参数,读入该行前size长度

(3)f.readlines(hint=-1):读入文件所有行,以每行为元素形成列表,如果给出参数,读入前hint行

(4)f.write(s):向文件写入一个字符串或字节流

(5)f.writelines(lines):将一个元素全为字符串的列表写入文件

(6)f.seek(offset):改变当前文件操作指针的位置,offset含义如下:0 – 文件开头; 1 – 当前位置; 2 – 文件结尾

五、文件的逐行操作

(1)一次读入,分行处理。文件较大时影响性能,易引起内存泄漏

f = open('yesterday',encoding='utf-8')#文件句柄
for index,line in enumerate(f.readlines()):
    if(index == 9):
        print("-------------分割线--------------")
        continue;
    print(line.strip())

(2)分行读入,逐行处理,效率高,不会造成内存泄漏

f = open('yesterday',encoding='utf-8')#文件句柄
count = 0
for line in f:
    count+=1
    if(count == 10):
        print("-------------分割线--------------")
        continue;
    print(line.strip())

六、其他相关操作

(1)tell()获取光标在文件的位置

f = open('yesterday',encoding='utf-8')#文件句柄
print(f.tell())
print(f.read(4))
print(f.tell())

(2)seek(offset[,from])方法用于移动文件读取指针到指定位置。offset参数表示要移动的字节数,参数指定要移动字节的引用位置。from为0表示文件开头,1表示当前位置,2表示文件结尾作为参考位置

f = open('yesterday',encoding='utf-8')#文件句柄
print(f.tell())
print(f.readline())
print(f.tell())
f.seek(0) #回到文件开头
print(f.readline())

(3)seekable()判断光标能否在文件中移动,例如终端文件的光标不可移动;flush()是用于强制刷新,把缓存中的数据强制实时刷新到硬盘中

(4)truncate([size]) 方法用于截断文件并返回截断的字节长度。指定长度的话,就从文件的开头开始截断指定长度,其余内容删除;不指定长度的话,就从文件开头开始截断到当前位置,其余内容删除。

七、文件修改

1.简单粗暴直接修改

(1)打开文件,获取文件内容;

(2)对内容进行修改;

(3)清空原来文件的内容;

(4)把新的内容写进去。

fw = open('username','a+',encoding='utf-8')
new_status = ''
fw.seek(0)
for s in fw:
    stu = 'A班_'+s
    new_status = new_status + stu #读文件并修改
fw.seek(0)
fw.truncate()
fw.write(new_status)
fw.flush()
fw.close()

2.备份文件的方法

当文件很大时,刚刚的方法在一次性读取文件内容和写入新内容时,耗时长,占用磁盘空间也较大。

备份文件的方法可以建立一个备份文件,修改一行写一行,具体步骤如下:

(1)打开2个文件,原文件a和备份文件b。如a.txt    b.txt.bak

(2)删除a文件,将b文件名改为a文件名

import os
with open('username',encoding='utf-8') as fr,open('username.bak','w',encoding='utf-8') as fw :
    for line in fr:
        newline = line.replace('7','seven')
        fw.write(newline)
os.remove('username')
os.rename('username.bak','username')

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值