Python操作文件

布啦豆 41262

python内置读写操作文件的函数open(),以及各种模式读写追加的模式,先以表格形式列出来

模式 描述
"a" 追加的形式打开,往文件末尾追加数据;文件不存在会自动新建
"r" 以读方式打开,只能读文件 , 如果文件不存在,会发生异常
"w" 以写方式打开,只能写文件, 如果文件不存在,创建该文件;如果文件已存在,先清空,再打开文件
"rb" 以二进制读方式打开,只能读文件 , 如果文件不存在,会发生异常
"wb" 以二进制写方式打开,只能写文件, 如果文件不存在,创建该文件;如果文件已存在,先清空,再打开文件
"rt" 以文本读方式打开,只能读文件 , 如果文件不存在,会发生异常
"wt" 以文本写方式打开,只能写文件, 如果文件不存在,创建该文件;如果文件已存在,先清空,再打开文件
"rb+" 以二进制读方式打开,可以读、写文件 , 如果文件不存在,会发生异常
"wb+" 以二进制写方式打开,可以读、写文件, 如果文件不存在,创建该文件;如果文件已存在,先清空,再打开文件

上面是打开文件的模式,下面介绍下代码使用情况:

>>> f = open("test.txt","a")
>>> f.write("Opera File")
10
>>> f.close()

简单说明一下,执行完f.write("Opera File")之后,显示数字10,这个10代表写入字符串的个数,也就是当前操作写入了10个字符。

然后打开文件瞧一瞧

操作文件

然后再对test.txt进行追加模式的修改

>>> f = open("test.txt","a")
>>> f.write("英雄联盟")
4
>>> f.close()

操作文件

重新折腾一个文件,w模式下,写多行数据,然后做读取测试

>>> f = open("lines.txt","w")
>>> for i in range(1,10):
        f.write(str(i*i*i)+"\n")
>>> f.close()

这里也要简单说明,\n表示换行,等于编辑文本时按的回车

打开文件查看结果

文件写入多行

多行文件已经准备好了,现在来试试r模式

>>> f = open("lines.txt","r")
>>> while True:
        line = f.readline()
        if not line:
            break
        print(line)
1
8
27
64
125
216
343
512
729
>>> f.close()

代码中使用到while循环,还是死循环,所以这里有必要对代码进行一个解析:

  • 文件有多少行并不确定,所以这个while循环的逻辑是一次读取一行,每次都对读出的数据进行一个判断
  • 如果行内有数据,则判断失效,继续执行,打印改行。
  • 循环一遍之后,又开始新的一行读取。如果读取出来的行是空,则表示文件没了,break这个关键字,会结束当前循环,即while循环

如果你在考虑一个情况:上一行有数据,下一行有数据,中间行什么都没有?

不用担心,上一行有数据,下一行有数据,中间行你什么都没看到,那就表明,这里只有回车【或者几个空格】,回车符号和空格符号也是数据,不代表这行不能读

异常问题

文件操作很容易出异常,就上面的代码而言,也有可能出现文件忘记关闭或者数据写入异常的情况,所以这里必须提前介绍一下with ... as ...语法,示例代码如下:

>>> with open("lines.txt","r") as f:
        line = f.readlines()
        for i in line:
            print(line)
1
8
27
64
125
216
343
512
729

with ... as ...语法在之前的文章中并没有提及,所以这里简单介绍提一句:with不仅有更优雅的语法,还可以很好的处理上下文环境产生的异常。后面会对这一语法做专门的介绍

使用语言的好特性,而不是那些糟糕的特性

以上就是文件的读写和追加示例,后面附上文件类型的可操作函数

函数名 描述
file.close()【常用】 关闭文件。关闭后文件不能再进行读写操作。
file.write(str) 将字符串写入文件,没有返回值。
file.writelines(sequence) 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。
file.flush() 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
file.readline([size]) 读取整行,包括 "\n" 字符。
file.readlines([sizeint]) 读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。
file.next() 返回文件下一行。
file.fileno() 返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
file.isatty() 如果文件连接到一个终端设备返回 True,否则返回 False。
file.read([size]) 从文件读取指定的字节数,如果未给定或为负则读取所有。
file.seek(offset[, whence]) 设置文件当前位置
file.tell() 返回文件当前位置。
file.truncate([size]) 截取文件,截取的字节通过size指定,默认为当前文件位置。

版权声明:允许转载,转载请注明出处 —— 《Python3教程》: Python操作文件

Copyright @2016-2021 | 赣ICP备16003025号-1 | 公安备案号:36062202000048 |