Python的文件读写(完整版)

好久没用Python,忘记Python对文件的操作,网上好多都说的乱七八糟,觉得还是自己总结一个完整版的吧,以后要是再忘了就打开翻阅。大家如果发现有错误或者有补充内容,还请在留言区斧正,非常感谢!

一、打开文件

open 函数用来打开文件,语法如下:

open(name[, mode[, buffering]])

其中:

  • name 是文件名,是这里唯一的一个强制参数
  • mode 是打开模式
  • buffering 是缓冲的意思,在下文会对他们进行更详细的解释

假如现在有一个名为 new.txt 文本,位置在G:\text 下,那么可以这样去打开这个文件:

f = open(r'G:\text\new.txt ')

如果该目录下没有这个文件,则会报错:

>>> open(r'G:\text\new.txt')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'G:\\text\\new.txt'

如果打开正确,则会返回一个文件对象:

>>> open(r'G:\text\new.txt')
<_io.TextIOWrapper name='G:\\text\\new.txt' mode='r' encoding='cp936'>

1.1、文件模式(mode)

为什么会有文件模式呢?

当open函数只有一个文件名参数时,我们可获得一个文件对象,但是如果我们要向文件写入内容,就得提供一个模式参数

先给出参数表格:

参数作用
rread 读模式
wwrite 写模式
aadd 追加模式
bbyte 使用二进制模式打开(b可以添加到其他模式中使用)
+表明读写都是允许的(可以参与到任何模式中)

为啥有二进制?
        使用二进制来读写文件,与使用文本模式不会有很大的差别。但是在使用二进制模式时,Python会原样给出文件中的内容,而文本模式下不一定。
        例如要打开音频和图像的时候,就应该在打开模式中加入b,例如“rb”可以用来读取一个二进制文件

1.2 缓冲(buffering)

当传入0或者False时,输入和输出是无缓冲的,也就是指所有的读写操作都是直接针对硬盘

如果传入1或者True,I/O就是有缓冲的,有缓冲是指Python使用内存替代了硬盘,这样程序会更快

如果是大于1的数字,则代表缓冲区的大小(以字节为单位)

如果是-1,则代表是默认的缓冲区大小

二、基本的文件方法

2.1、读和写

如果有一个名为 f 的类文件对象,可以使用 f.write 和 f.read 对文件进行读写。read()函数可以带有参数,作用是告诉流要读取多少字节。下面用一个例子来说明:

>>> f = open(r"G:\text\new.txt","w")
>>> f.write("Hello,")
6
>>> f.write("world!")
6
>>> f.close()
>>> f = open(r"G:\text\new.txt","r")
>>> f.read(5)
'Hello'
>>> f.read()
',world!'

在这里插入图片描述

2.2 读写行

函数作用
f.readline()读取单独的一行(一直读到换行符的出现,同时也读取这个换行符)
f.readlines()读取一个文件中所有行并将其作为列表返回
f.writelines()传给这个函数一个字符串的列表,或者是可迭代的对象,函数会把所有的字符串写入文件。但是注意程序不会新增行

此外注意:没有writeline方法在这里插入图片描述

2.3 关闭文件

通常来说,文件对象会在退出程序之后会自动关闭,但关闭文件可以避免在某些操作系统或者设置中进行无用的修改,也会避免系统中打开了很多的文件消耗大量资源(这是因为Python出于效率的考虑而把数据临时存在某个地方,这些数据可能正处在缓存中,如果程序崩溃了,数据就不会被写入文件)。为了安全起见,要在使用完文件后关闭。

如果为了确保文件关闭,可以使用try/finally语句,举例如下:

try:
	#对文件的操作
finally:
	file.close()

在Python 2.5之后,引入了一个新的语句,即with语句

with open("new.txt") as f:
	#文件操作

文件在语句结束后会被自动关闭。

文件迭代器

Python可是大名鼎鼎的Python,不来点niubility的操作那还叫Python吗?
Python中,文件对象是可迭代的,意味着可以直接在for循环中使用文件对象,从而进行迭代文件的内容。下面两个demo都是行得通的:

f = open(filename)
for line in f:
	#文件操作
f.close()
for line in open(filename):
	#文件操作

至此,笔者感觉大部分的Python对文件的操作介绍完了,如果大家看完之后有补充或者修改的意见,请在评论区留言~ 谢谢观看!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值