亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python

Python 文件 I/O

Python 文件 I/O

在本教程中,您将了解 Python 文件操作。更具体地说,打开文件、读取文件、写入文件、关闭文件以及您应该了解的各种文件方法。

视频:在 Python 中读取和写入文件

文件

文件是磁盘上的命名位置,用于存储相关信息。它们用于将数据永久存储在非易失性存储器(例如硬盘)中。

由于随机存取存储器 (RAM) 是易失性的(当计算机关闭时会丢失其数据),我们通过永久存储文件来使用文件以备将来使用数据。

当我们想要读取或写入文件时,我们需要先打开它。完成后,需要关闭它,以便释放与文件绑定的资源。

因此,在 Python 中,文件操作按以下顺序进行:

  1. 打开文件
  2. 读取或写入(执行操作)
  3. 关闭文件

在 Python 中打开文件

Python有一个内置的open() 打开文件的功能。该函数返回一个文件对象,也称为句柄,用于相应地读取或修改文件。

>>> f = open("test.txt")    # open file in current directory
>>> f = open("C:/Python38/README.txt")  # specifying full path

我们可以在打开文件时指定模式。在mode中,我们指定是否要读取r ,写w 或附加 a 到文件。我们还可以指定要以文本模式还是二进制模式打开文件。

默认是在文本模式下阅读。在这种模式下,我们在读取文件时获取字符串。

另一方面,二进制模式返回字节,这是处理图像或可执行文件等非文本文件时使用的模式。

模式 说明
r 打开一个文件进行读取。 (默认)
w 打开一个文件进行写入。如果文件不存在则创建一个新文件,如果文件存在则截断该文件。
x 打开一个文件进行独占创建。如果文件已经存在,则操作失败。
a 打开一个文件以在文件末尾追加而不截断它。如果文件不存在,则创建一个新文件。
t 以文本模式打开。 (默认)
b 以二进制模式打开。
+ 打开一个文件进行更新(读写)
f = open("test.txt")      # equivalent to 'r' or 'rt'
f = open("test.txt",'w')  # write in text mode
f = open("img.bmp",'r+b') # read and write in binary mode

与其他语言不同,字符 a 在使用 ASCII 编码之前不暗示数字 97 (或其他等效编码)。

此外,默认编码取决于平台。在windows中是cp1252 但是 utf-8 在 Linux 中。

因此,我们不能同时依赖默认编码,否则我们的代码在不同平台上的行为会有所不同。

因此,在文本模式下处理文件时,强烈建议指定编码类型。

f = open("test.txt", mode='r', encoding='utf-8')

在 Python 中关闭文件

当我们对文件执行完操作后,我们需要正确关闭文件。

关闭文件将释放与文件绑定的资源。它是使用 close() 完成的 Python中可用的方法。

Python 有一个垃圾收集器来清理未引用的对象,但我们不能依赖它来关闭文件。

f = open("test.txt", encoding = 'utf-8')
# perform file operations
f.close()

这种方法并不完全安全。如果我们对文件执行某些操作时发生异常,代码会退出而不关闭文件。

更安全的方法是使用 try...finally 块。

try:
   f = open("test.txt", encoding = 'utf-8')
   # perform file operations
finally:
   f.close()

这样,即使引发导致程序流停止的异常,我们也能保证文件被正确关闭。

关闭文件的最佳方法是使用 with 陈述。这样可以确保在 with 内的块时关闭文件 语句已退出。

我们不需要显式调用 close() 方法。它是在内部完成的。

with open("test.txt", encoding = 'utf-8') as f:
   # perform file operations

在 Python 中写入文件

为了在 Python 中写入文件,我们需要在 w 中打开它 , 附加 a 或独创x 模式。

我们需要小心 w 模式,因为如果文件已经存在,它将覆盖到文件中。因此,所有以前的数据都被删除了。

使用 write() 写入字符串或字节序列(用于二进制文件) 方法。该方法返回写入文件的字符数。

with open("test.txt",'w',encoding = 'utf-8') as f:
   f.write("my first file\n")
   f.write("This file\n\n")
   f.write("contains three lines\n")

该程序将创建一个名为 test.txt 的新文件 如果当前目录不存在,则在当前目录中。如果确实存在,则将其覆盖。

我们必须自己包含换行符以区分不同的行。


在 Python 中读取文件

要在 Python 中读取文件,我们必须在读取 r 中打开文件 模式。

有多种方法可用于此目的。我们可以使用 read(size) 读取 size 的方法 数据的数量。如果 大小 未指定参数,读取并返回到文件末尾。

我们可以阅读text.txt 我们在上面的部分中以如下方式编写的文件:

>>> f = open("test.txt",'r',encoding = 'utf-8')
>>> f.read(4)    # read the first 4 data
'This'

>>> f.read(4)    # read the next 4 data
' is '

>>> f.read()     # read in the rest till end of file
'my first file\nThis file\ncontains three lines\n'

>>> f.read()  # further reading returns empty sting
''

我们可以看到 read() 方法返回换行符为 '\n' .一旦到达文件末尾,我们会在进一步阅读时得到一个空字符串。

我们可以使用 seek() 改变我们当前的文件光标(位置) 方法。同样,tell() 方法返回我们当前的位置(字节数)。

>>> f.tell()    # get the current file position
56

>>> f.seek(0)   # bring file cursor to initial position
0

>>> print(f.read())  # read the entire file
This is my first file
This file
contains three lines

我们可以使用 for 循环逐行读取文件。这既高效又快速。

>>> for line in f:
...     print(line, end = '')
...
This is my first file
This file
contains three lines

在这个程序中,文件本身的行包含一个换行符 \n .所以,我们使用 print() 的 end 参数 打印时避免两个换行符的功能。

或者,我们可以使用 readline() 方法来读取文件的各个行。此方法读取文件直到换行符,包括换行符。

>>> f.readline()
'This is my first file\n'

>>> f.readline()
'This file\n'

>>> f.readline()
'contains three lines\n'

>>> f.readline()
''

最后,readlines() 方法返回整个文件剩余行的列表。当到达文件结尾(EOF)时,所有这些读取方法都返回空值。

>>> f.readlines()
['This is my first file\n', 'This file\n', 'contains three lines\n']

Python 文件方法

文件对象有多种可用的方法。其中一些已经在上面的例子中使用过。

以下是文本模式下的完整方法列表以及简要说明:

方法 说明
关闭() 关闭打开的文件。如果文件已经关闭则无效。
分离() 将底层二进制缓冲区与 TextIOBase 分开 并返回它。
fileno() 返回文件的整数(文件描述符)。
flush() 刷新文件流的写缓冲区。
isatty() 返回 True 如果文件流是交互式的。
读取(n ) 最多读取 n 文件中的字符。如果为负数或 None 则读取到文件末尾 .
可读() 返回 True 是否可以读取文件流。
readline(n =-1) 从文件中读取并返回一行。最多读入 n 字节(如果指定)。
readlines(n =-1) 从文件中读取并返回行列表。最多读入 n 字节/字符(如果指定)。
seek(偏移量 ,来自 =SEEK_SET ) 将文件位置更改为 offset 字节,参考 from (开始,当前,结束)。
可搜索() 返回 True 如果文件流支持随机访问。
告诉() 返回当前文件位置。
截断(大小 =None ) 将文件流的大小调整为 size 字节。如果 大小 未指定,调整到当前位置。
可写() 返回 True 是否可以写入文件流。
写(s ) 写入字符串 s 到文件并返回写入的字符数。
writelines( ) 写入的列表 到文件中。

Python

  1. C 输入输出 (I/O)
  2. Python 数据类型
  3. Python 运算符
  4. Python 列表
  5. Python 元组
  6. Python字典
  7. Python 文件 I/O
  8. Python 检查文件是否存在 |如何在 Python 中检查目录是否存在
  9. Python JSON:编码(转储)、解码(加载)和读取 JSON 文件
  10. C - 文件 I/O
  11. C# - 文件 I/O
  12. Python - 文件 I/O