📜  Python数据持久性-文件API

📅  最后修改于: 2020-11-07 08:22:03             🧑  作者: Mango


Python使用内置的input()print()函数执行标准的输入/输出操作。 input()函数从标准输入流设备(例如键盘)读取字节。

另一方面, print()函数将数据发送到标准输出流设备,即显示监视器。 Python程序通过sys模块中定义的标准流对象stdinstdout与这些IO设备进行交互。

input()函数实际上是sys.stdin对象的readline()方法的包装。接收到来自输入流的所有击键,直到按下“ Enter”键为止。

>>> import sys
>>> x=sys.stdin.readline()
Welcome to TutorialsPoint
>>> x
'Welcome to TutorialsPoint\n'

请注意, readline()函数保留结尾的’\ n’字符。还有一个read()方法,该方法从标准输入流读取数据,直到被Ctrl + D字符终止为止。

>>> x=sys.stdin.read()
Hello
Welcome to TutorialsPoint
>>> x
'Hello\nWelcome to TutorialsPoint\n'

同样, print()是一个便利函数,用于模拟stdout对象的write()方法。

>>> x='Welcome to TutorialsPoint\n'
>>> sys.stdout.write(x)
Welcome to TutorialsPoint
26

就像stdin和stdout预定义流对象一样, Python程序可以从磁盘文件或网络套接字读取数据并将数据发送到磁盘文件或网络套接字。它们也是流。任何具有read()方法的对象都是输入流。具有write()方法的任何对象都是输出流。通过使用内置的open()函数获取对流对象的引用来建立与流的通信。

open()函数

此内置函数使用以下参数-

f=open(name, mode, buffering)

name参数是磁盘文件或字节字符串,mode是可选的一个字符的字符串,用于指定要执行的操作的类型(读,写,追加等),并且缓冲参数为0、1或-1,指示缓冲已关闭,已打开或系统默认。

下表列出了文件打开模式。默认模式为“ r”

Sr.No Parameters & Description
1

R

Open for reading (default)

2

W

Open for writing, truncating the file first

3

X

Create a new file and open it for writing

4

A

Open for writing, appending to the end of the file if it exists

5

B

Binary mode

6

T

Text mode (default)

7

+

Open a disk file for updating (reading and writing)

为了将数据保存到文件,必须以“ w”模式打开它。

f=open('test.txt','w')

该文件对象充当输出流,并且可以访问write()方法。 write()方法将一个字符串发送到此对象,并存储在其基础文件中。

string="Hello TutorialsPoint\n"
f.write(string)

关闭流很重要,以确保缓冲区中剩余的所有数据都完全传输到该流。

file.close()

尝试使用任何测试编辑器(例如记事本)打开“ test.txt”,以确认成功创建文件。

要以编程方式读取“ test.txt”的内容,必须在“ r”模式下将其打开。

f=open('test.txt','r')

该对象充当输入流。 Python可以使用read()方法从流中获取数据。

string=f.read()
print (string)

该文件的内容显示在Python控制台上。 File对象还支持readline()方法,该方法能够读取字符串,直到遇到EOF字符为止。

但是,如果在“ w”模式下打开同一文件以在其中存储其他文本,则先前的内容将被删除。只要有写权限打开文件,就将其视为新文件。要将数据添加到现有文件,请在附加模式下使用“ a”。

f=open('test.txt','a')
f.write('Python Tutorials\n')

现在,该文件具有较早版本以及新添加的字符串。文件对象还支持writelines()方法,以将列表对象中的每个字符串写入文件。

f=open('test.txt','a')
lines=['Java Tutorials\n', 'DBMS tutorials\n', 'Mobile development tutorials\n']
f.writelines(lines)
f.close()

readlines()方法返回一个字符串列表,每个字符串代表文件中的一行。也可以逐行读取文件,直到到达文件末尾。

f=open('test.txt','r')
while True:
   line=f.readline()
   if line=='' : break
   print (line, end='')
f.close()

输出

Hello TutorialsPoint
Python Tutorials
Java Tutorials
DBMS tutorials
Mobile development tutorials

二进制模式

默认情况下,对文件对象的读/写操作是对文本字符串数据执行的。如果要处理其他不同类型的文件,例如媒体(mp3),可执行文件(exe),图片(jpg)等,则需要在读/写模式中添加“ b”前缀。

以下语句将字符串转换为字节并写入文件。

f=open('test.bin', 'wb')
data=b"Hello World"
f.write(data)
f.close()

也可以使用encode()函数将文本字符串转换为字节。

data="Hello World".encode('utf-8')

我们需要使用“ rb”模式读取二进制文件。 read()方法的返回值在打印之前首先被解码。

f=open('test.bin', 'rb')
data=f.read()
print (data.decode(encoding='utf-8'))

为了将整数数据写入二进制文件,应通过to_bytes()方法将整数对象转换为字节。

n=25
n.to_bytes(8,'big')
f=open('test.bin', 'wb')
data=n.to_bytes(8,'big')
f.write(data)

要从二进制文件读回,请使用from_bytes()函数将read()函数的输出转换为整数。

f=open('test.bin', 'rb')
data=f.read()
n=int.from_bytes(data, 'big')
print (n)

对于浮点数据,我们需要使用Python标准库中的struct模块。

import struct
x=23.50
data=struct.pack('f',x)
f=open('test.bin', 'wb')
f.write(data)

从read()函数解压缩字符串,以从二进制文件检索浮点数据。

f=open('test.bin', 'rb')
data=f.read()
x=struct.unpack('f', data)
print (x)

同时读/写

当打开文件进行写入(带有“ w”或“ a”)时,将无法从中读取文件,反之亦然。这样做会引发UnSupportedOperation错误。我们需要先关闭文件,然后再执行其他操作。

为了同时执行两个操作,我们必须在mode参数中添加’+’字符。因此,“ w +”或“ r +”模式无需关闭文件即可使用write()和read()方法。 File对象还支持seek()函数,以将流后退到任何所需的字节位置。

f=open('test.txt','w+')
f.write('Hello world')
f.seek(0,0)
data=f.read()
print (data)
f.close()

下表总结了对象等文件可用的所有方法。

Sr.No Method & Description
1

close()

Closes the file. A closed file cannot be read or written any more.

2

flush()

Flush the internal buffer.

3

fileno()

Returns the integer file descriptor.

4

next()

Returns the next line from the file each time it is being called. Use next() iterator in Python 3.

5

read([size])

Reads at most size bytes from the file (less if the read hits EOF before obtaining size bytes).

6

readline([size])

Reads one entire line from the file. A trailing newline character is kept in the string.

7

readlines([sizehint])

Reads until EOF using readline() and returns a list containing the lines.

8

seek(offset[, whence])

Sets the file’s current position. 0-begin 1-current 2-end.

9

seek(offset[, whence])

Sets the file’s current position. 0-begin 1-current 2-end.

10

tell()

Returns the file’s current position

11

truncate([size])

Truncates the file’s size.

12

write(str)

Writes a string to the file. There is no return value.