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循环,还是死循环,所以这里有必要对代码进行一个解析:
如果你在考虑一个情况:上一行有数据,下一行有数据,中间行什么都没有?
不用担心,上一行有数据,下一行有数据,中间行你什么都没看到,那就表明,这里只有回车【或者几个空格】,回车符号和空格符号也是数据,不代表这行不能读
文件操作很容易出异常,就上面的代码而言,也有可能出现文件忘记关闭或者数据写入异常的情况,所以这里必须提前介绍一下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指定,默认为当前文件位置。 |