飞道的博客

python学习之文件读写

426人阅读  评论(0)

文件打开

对于编程语言,少不了文件的读取和写入。在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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场