Python I / O –打开,读取,写入文件
在本教程中,我们将了解Python I / O,如何打开文件以及如何使用Python读取和写入文件。
Python支持的文件类型
Python支持以下类型的文件
文本文件–以字符形式存储数据的文件。
二进制文件–数据以字节形式存储的文件。对于存储图像,序列化对象很有用。
开启档案
使用内置函数open()打开python中的文件,该函数返回文件对象。如果无法打开文件,则会引发OSError。 open的语法如下。
file_object = open("文件名"," open_mode","缓冲","编码")
参数说明
filename是要打开的文件的路径(绝对路径或者相对于当前工作目录的路径)。
open_mode指定打开文件的模式。它是一个可选参数,默认为" r",表示可以在文本模式下阅读。
buffering指定缓冲策略。 0表示关闭缓冲(仅在二进制模式下允许)
1表示行缓冲(仅在文本模式下可用)
整数> 1表示缓冲区大小(以字节为单位)。
它也是一个可选参数,默认缓冲区大小为4096或者8192字节。
- encoding指定用于对文件进行解码或者编码的编码的名称。仅应在文本模式下使用。
在Python中打开文件的模式
| 模式 | 说明 |
|---|---|
| ‘r’ | 打开文件以从文件开头开始读取。这是默认模式。 |
| ‘w’ | 打开文件进行写入。文件中所有现有数据都将被删除 |
| ‘x’ | 打开以进行独占创建,如果文件已经存在,则失败 |
| ‘a’ | 打开以将内容追加到现有文件中。如果文件不存在,则会创建一个新文件。 |
| ‘b’ | 以二进制模式打开 |
| ‘t’ | 以文本模式打开,这是默认模式。 |
| ‘+’ | 打开以进行更新(读和写) |
在Python中使用open()函数的一些示例。
# opens file using default mode which is ‘rt’ meaning reading a text file f = open(“abc.txt”) # opens file for writing in binary mode f = open(“abc.txt”, 'wb') # opens file for writing and reading in binary mode f = open(“abc.txt”, 'w+b') # opens file for reading and writing f = open(“abc.txt”, 'r+') # opens file for writing, existing content is deleted f = open(“abc.txt”, 'w')
关闭文档
完成文件I / O操作后,应使用close()方法关闭文件。立即关闭文件会释放该文件使用的所有系统资源。
f =打开(" abc.txt"," a")
文件操作
..
..
f.close()
关闭文件对象后,将无法再访问文件对象。如果要再次使用该文件,则需要使用open()函数再次打开该文件。
添加到文件的Python示例
这是一个以添加模式打开文件并将内容添加到文件末尾的示例。稍后以读取模式打开相同文件以读取文件。
def write_file(fname):
try:
f = open(fname, 'a')
f.write("This is a test file.\n")
finally:
f.close()
def read_file(fname):
try:
f = open(fname, 'r')
str = f.read()
print('Content- ', str)
finally:
f.close()
write_file('F:\theitroad\abc.txt')
read_file('F:\theitroad\abc.txt')
With Open
在上面的示例中,我们可以看到有很多代码可以确保文件正确关闭。但是也需要try-finally块,以确保始终关闭文件并释放资源,即使引发异常也是如此。
推荐的另一种方法是在使用文件对象时在Python中使用with关键字。通过使用with语句打开文件,即使套件在某个时候引发异常,它在套件完成后也会自动关闭。
使用with的语法如下:
with open(“file name”, “open mode”) as fileobject:
与开放式Python示例一起使用
def read_file(fname):
with open(fname, 'r') as f:
s = f.read()
print('Content- ', s)
print('File closed- ', f.closed)
read_file('F:\theitroad\abc.txt')
使用f.closed()可以检查文件是否已自动关闭。
Python File方法
这是类io.TextIOBase中的方法的完整列表,该类是文本流的基类。这些是通过以文本模式打开文件来获取文件对象时将使用的方法。
| 方法 | 描述 |
|---|---|
| close() | 刷新并关闭此流。 |
| closed() | 如果流关闭则为真。 |
| fileno() | 返回流的文件描述符(整数) |
| flush() | 刷新流的写缓冲区(如果适用)。 |
| isatty() | 如果流是交互式的,则返回True |
| read(n = -1) | 作为单个str从流中读取并返回最多n个字符。如果n为负或者无,则读取直到EOF。 |
| readline(n = -1) | 读取直到换行符或者EOF并返回单个str。如果指定n,则最多读取n个字符。 |
| readlines() | 从流中读取并返回行列表。 |
| read() | 如果可以从中读取流,则返回True。 |
| seek(offset,fromwhere) | 将流位置更改为给定的字节偏移量。 |
| seekable() | 如果流支持随机访问,则返回True。 |
| tell() | 返回当前流的位置。 |
| truncate(size = None) | 将流调整为给定大小(以字节为单位)。如果未指定大小,则调整为当前位置。 |
| writable() | 如果流支持写入,则返回True。 |
| write(s) | 将字符串s写入流并返回写入的字符数。 |
| writelines(lines) | 向流中写入行列表。 |

