Python数据持久性 用os模块处理文件
除了 open() 函数返回的文件对象外,文件IO操作也可以使用Python的内置库os模块进行,该模块提供了与操作系统相关的有用函数。这些函数在文件上执行低级别的读写操作。
os 模块的 open() 函数与内置的 open() 函数相似。然而,它并不返回一个文件对象,而是返回一个文件描述符,一个唯一的整数,对应于打开的文件。文件描述符的值0、1和2代表stdin、stdout和stderr流。其他文件将被赋予从2开始的递增的文件描述符。
与 open() 内置函数的情况一样, os.open() 函数也需要指定文件访问模式。下表列出了os模块中定义的各种模式。
Sr.No. | Os模块和描述 |
---|---|
1 | os.O_RDONLY 只为阅读而打开 |
2 | os.O_WRONLY 只为写而开放 |
3 | os.O_RDWR 为读和写而开放 |
4 | os.O_NONBLOCK 打开时不阻塞 |
5 | os.O_APPEND 在每次写入时进行追加。 |
6 | os.O_CREAT 如果文件不存在,则创建文件 |
7 | os.O_TRUNC 将大小截断为0 |
8 | os.O_EXCL 如果创建文件并且文件存在则出错 |
要打开一个新的文件以写入数据,通过插入管道(|)操作符指定 O_WRONLY 和 O_CREAT 模式。os.open()函数返回一个文件描述符。
f=os.open("test.dat", os.O_WRONLY|os.O_CREAT)
注意,数据是以字节串的形式写入磁盘文件的。因此,通过使用前面的encode()函数将普通字符串转换为字节字符串。
data="Hello World".encode('utf-8')
os模块中的write()函数接受这个字节字符串和文件描述符。
os.write(f,data)
不要忘记用close()函数关闭文件。
os.close(f)
使用os.read()函数来读取文件的内容,请使用以下语句。
f=os.open("test.dat", os.O_RDONLY)
data=os.read(f,20)
print (data.decode('utf-8'))
注意,os.read()函数需要文件描述符和要读取的字节数(字节串的长度)。
如果你想打开一个文件同时进行读/写操作,请使用O_RDWR模式。下表显示了os模块中与文件操作相关的重要函数。
序号 | 功能和描述 |
---|---|
1 | os.close(fd) 关闭文件描述符。 |
2 | os.open(file, flags[, mode]) 打开文件,根据flags设置各种标志,并可能根据mode设置其模式。 |
3 | os.read(fd, n) 从文件描述符 fd 中最多读取 n 个字节。返回一个包含所读字节的字符串。如果fd所指的文件已经到了尽头,则返回一个空字符串。 |
4 | os.write(fd, str) 将字符串 str 写到文件描述符 fd。返回实际写入的字节数。 |