Python中的文件操作相关

文件打开

文件操作就是使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以对文件内的文本进行各种读、写、删除、追加的操作

 

f = open('test.txt',mode='r',encoding='utf-8')

f:文件句柄所有对文件的操作都是操作文件句柄操作,open() 打开一个文件;

'test.txt' 第一个内容是文件的名字(必须是字符串),包含存放路径,可以是相对路径,也可以是绝对路径

mode 第二个内容是文件的操作方式:读、写、追加,可省略mode,简写“a”/“a+”;

encoding 第三个内容是文件的编码集,如utf-8、gbk等。当对文本进行的是字节操作的时候不需要编码格式,否则报错。

可省略encoding ,简写“utf-8”/“utf8”;

 

 

文件的存放路径

绝对路径:从磁盘根目录开始一直到文件名,如:C:\Users\Administrator\PycharmProjects\S19\

相对路径:用一个文件夹下的文件,相对于当前这个程序所在的文件而言。如果在同一个文件中,则相对路劲就是这个文件名。如果再上一层文件夹则要使用../

推荐使用相对路劲,因为我把这个程序的整个文件发给你的时候,就可以运行,如果使用绝对路径还需要额外的拷贝外部文件给你。

 

当遇到文件路径名称、符号属于系统字符无法识别时,需要转义

1、c:\user\... 可以把单个\写成双\\

2、在路径的前面加一个r,如:with open(r'c:\user\... ','r',encoding='utf-8')as f,

 

 

数据操作

读模式(r/rb)

 

r模式是文件的读取操作模式,文本打开后,通过对句柄f的操作读取文件的内容,当文本是通过utf-8 编码集写入的就需要utf-8来读取,否则为乱码,gbk的也是同理。

 

read()将文件中的内容一次性全部读取出来;弊端 如果文件很大就会非常的占用内存,容易导致内存奔溃

 

read(3)读取的时候指定读取到什么位置,我们指定先读取前三个内容,然后再使用read()进行读取会继续向后读取,而不会从头开始读取

r模式这样读取的就是文字,如果使用rb模式读取出来的就是字节

 

readline()读取每次只读取一行,注意点:readline()读取出来的数据在后面都有一个\n,解决这个问题只需要在我们读取出来的文件后边加一个strip()就OK了

 

readlines()读取的是每一行,存放到一个列表当中。如果有个较大的文件我们进行读取不推荐使用直接read()的方法,而选择readline()逐行读取。

 

注意点:读完的文件句柄一定要关闭 

 

 

rb模式是直接读取bytes类型,在rb模式下不要encoding字符集,读取的文本我们不可以直接识别,但计算机可以识别。

rb的作用:在读取非文本文件的时候,比如要读取mp3,图像,视频等信息的时候就需要用到rb,因为这种数据是没办法直接显示出来的,在后面我们文件上传下载的时候还会用到。

 

 

r+模式是文件的读取+写入操作模式,

f = open("wenjian.txt",mode="r+",encoding="utf-8")

msg = f.read()

print(msg)

msg1 = f.write("文章到此结束。")

f.close()

 

 

(覆盖)写模式(w,wb)

 

f = open('t2.txt',mode='w',encoding='utf-8')

f.write('在网上也是这样。')

 

w模式是指打开文件后写入内容,当我选择使用w模式的时候,

如果文件不存在,程序会自动在当前文件夹下创建同名文件,

文件存在时,打开文件的时候就会把文件中的所有内容都清空,然后再进行写入操作

 

写文件的时候我们要养成一个写完文件就刷新的习惯, 刷新flush()

或者当文件边写入,边读取的时候,需要及时flush(),才能够被读取。

 

注意点:如果文件不存在使用w模式会创建文件,文件存在w模式是覆盖写,在打开文件时会把文件中所有的内容清空。

 

wb模式是指文件按照字节写入内容,在wb模式下不能encoding字符集,wb模式下,不可以指定打开文件的编辑,但是写文件的时候必须将字符串转换成utf-8的bytes数据

 

w+模式是指文件的写入+读取模式,

 

 

 

追加模式(a,ab)

 

f = open('t2',mode='a',encoding='utf-8')

f.write('相对路径')

 

只要是a或者ab,a+都是在文件的末尾写入,不论光标在任何位置。

 

 

模式梳理

r只读模式,不能写

read() 读取全部

模式是r的时候 read(3) 就是读取3个字符

模式是rb的时候 read(3) 就是读取3个字节

readline() 读取一行

readlines() 逐行读取存放在一个列表中

 

w只写模式,不能读

覆盖写,先清空文件的内容,在写

当文件不存在的时候,创建一个文件

 

a追加模式,不能读

写的内容一直都在文件的末尾

 

r+ 读写

错误示范 先写后读,光标在前,写入会覆盖原来的文本

正确的是 先读后写

 

w+ 写读

写读的时候是读不到内容的,除非移动光标

 

a+ 追加写 读

写读的时候是读不到内容的,除非移动光标

 

最常用: r,w,a,r+,a+

 

 

常用操作方法:

 

seek()

seek(n)光标移动到n位置,

注意: 移动单位是byte,所有如果是utf-8的中文部分要是3的倍数

通常我们使用seek都是移动到开头或者结尾

移动到开头:seek(0) 实际是seek(0,0)

当前位置:seek(0,1)

移动到结尾:seek(0,2)

seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头,1表示当前位置,2表示结尾

seek()里边单独一个数大于0的就是按照字节在调节光标

 

tell()

使用tell()可以帮我们获取当前光标在什么位置,光标是按照字节数的

 

truncate() 截断文件

如果想做截断操作,光标是按照字节数的。 记住了,要先挪动光标. 挪动到你想要截断的位置. 然后再进行截断

关于truncate(n), 如果给出了n. 则从开头进行截断, 如果不给n, 则从当前位置截断. 后面

的内容将会被删除

 

文件上下文管理

with open('t2',mode='w',encoding='utf-8')as f:

#上下文管理 --- 面试题

msg = f.write('写入内容')

print(msg)

不用你自动关闭文件,代码块执行完自动关闭

 

当同时操作两个文件时,一行展示不完可以用有斜线折行书写,如:

with open(r'c:\user\... ','r',encoding='utf-8')as f,\

open('t2','w',encoding='utf-8')as f1:

 

 

文件修改

import os

os.remove('t3') # 删除原数据

os.rename('t5','t3') # 新建的文件名改成原来的文件名

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值