文件打开
对于编程语言,少不了文件的读取和写入。在python中使用open
函数打开文件,在打开文件时,需要指定打开模式,是读取文件还是将内容写入到文件中。open
函数具体样子如下
open(file_name ,mode='r' ,buffering=-1 ,encoding = None )
- file_name是需要操作的文件名称,这里可以是绝地路径也可以是相对路径
- mode是打开文件方式,
open
函数默认的打开方式是只读模式 - buffering用于指定打开文件所用的缓冲方式,缓冲是指用于读取文件的缓冲区,缓冲区就是一段内存区域。设置缓冲区的目的是先把文件内容读取到缓冲区,可以减少CPU读取磁盘的次数。Buffering为0时表示不缓冲,为1时表示只缓冲一行数据,为-1时表示使用系统默认缓冲机制,默认为-1。任何大于1的值表示使用给定的的值作为缓冲区大小。一般情况下使用函数默认值即可
- encodeing用于指定文件的编码方式,默认采用utf-8,编码方式主要是指文件中的字符编码。我们经常会碰到这样的情况,当打开一个文件时,内容全部是乱码,这是因为创建文件时采用的编码方式,和打开文件时的编码方式不一样,就会造成字符显示错误,看上去就是乱码
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入 |
x | 写模式,新建一个文件,如果该文件已存在则会报错 |
b | 二进制模式 |
+ | 打开一个文件进行更新(可读可写) |
r+、rb+、wb、wb+、x+、xb+ | 这些是模式组合,参照上面单独模式的介绍即可 |
File对象
如果open
操作成功,则会返回一个File对象,通过对File对象操作来实现对文件的操作,以下是和File对象相关的所有属性的列表:
属性 | 描述 |
---|---|
file.closed | 返回true如果文件已被关闭,否则返回false |
file.mode | 返回被打开文件的访问模式 |
file.name | 返回文件的名称 |
file.encoding | 返回文件的编码 |
file.seek(offset, whence) | offset :开始的偏移量,也就是代表需要移动偏移的字节数 ; whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起 |
文件关闭
在操作完文件后,都需要对文件进行关闭,这时候需要调用close
函数,当然,有可能在操作文件过程中报错,无法到达close
函数执行行,我们可以通过try....finally
语句,通过这个语句,就算在文件操作过程中产生了错误,最终文件也会被关闭
try:
f = open('file_name', 'r')
#文件操作
finally:
if f:
f.close()
但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法,这和前面的try … finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法
with open('file_name', 'r') as f:
#文件操作
文件的读取
python读取文件时提供了以下四种方式
函数 | 描述 |
---|---|
read() | 一次性读取文件的全部内容 |
read(size) | 每次最多读取size个字节的内容 |
readline() | 每次读取一行内容 |
readlines() | 一次读取所有内容并按行返回list |
在读取文件内容时,通过判断文件的大小选择合适的方法对文件进行读取,下面通过一个样例在展示上面的函数具体操作过程
f = open("1.txt", "r")
p = f.read()
print("read")
print(p)
f.seek(0, 0)
p = f.read(2)
print("read(2)")
print(p)
f.seek(0, 0)
p = f.readline()
print("readline")
print(p)
f.seek(0, 0)
p = f.readlines()
print("readlines")
print(p)
f.close()
执行结果如下图所示
文件的写入
python提供了write
函数和writelines
函数提供文件的写入操作,在执行操作时,需要根据调用open
函数的mode参数来指定是添加还是覆盖。
f = open("1.txt","w+")
f.write("hello")
f.flush()
f.seek(0,0)
print(f.read())
f.close()
执行结果如下图所示,在上面代码中,如果调用f.seek(0,0)
这行时,则print没有任何结果,这是因为在调用write("hello")
函数时,文件指针指向了’o’字符的后面一个字符,如果调用了read函数,后面肯定没内容呀,通过调用f.seek(0,0)
,将指针从位置1移动到位置2,因此,再次调用f.read()
函数能够读取了文件中的内容
小结
本节主要介绍了python操作文件的过程,从调用open
函数打开文件,到read,write
函数操作文件内容,到最后调用close
关闭文件,
以上代码可以从git获得
转载:https://blog.csdn.net/qq_29983883/article/details/105464089