文件IO

通常情况下,你的计划的结果不仅现在很重要,而且在未来也很重要。为此,最好将结果存储在文件中,以便您可以在以后需要时使用它们。这称为文件输入和输出,或简称为:文件IO。

从文件中读取

在Python中打开文件的最佳方式是使用 the with statement 。这会自动打开该文件,并对其进行锁定,以便在您使用该文件时没有人能够修改它,然后将其关闭。然后,通过使用您在以下位置指定的变量来完成与文件的交互 as 。这被称为 file object 。若要获取文件的完整内容,请使用其 read() 如下所示的方法:

>>> with open('csv_file.txt', 'r') as f:
...     file_content = f.read()
...
>>> print(file_content)
1, 2, 3
4, 5, 6
7, 8, 9

其中第一个参数是文件的路径,第二个参数是所谓的文件模式。 r 是只读的。

注解

在一些教程和产品代码中,您可能会发现与文件交互的内容大致如下:

>>> f = open('csv_file.txt', 'r')
>>> file_content = f.read()
>>> f.close()
>>> print(file_content)
1, 2, 3
4, 5, 6
7, 8, 9

这是一种旧的处理文件的方式,在以下情况下 the with statement 当时还不存在。它有一个巨大的缺点,那就是您必须注意关闭文件。如果在以下情况下引发错误 openclose 它根本就没有关门。 The with statement 即使在出现异常的情况下也会为您处理此问题,因此是首选的方式。

您还可以遍历 f 就好像它是某种形式的容器:

>>> with open('csv_file.txt', 'r') as f:
...     for i, line in enumerate(f):
...         print('Line', i, '--', line)
...
Line 0 -- 1, 2, 3

Line 1 -- 4, 5, 6

Line 2 -- 7, 8, 9

如您所见,您会看到一些额外的白线。原因是每行仍包含其换行符 \n 最后。到这一个 print() 默认情况下添加一个额外的行,这样您最终会得到一个空行。若要避免此问题,请使用 strip() 行字符串的方法:

>>> with open('csv_file.txt', 'r') as f:
...     for i, line in enumerate(f):
...         stripped_line = line.strip()
...         print('Line', i, '--', stripped_line)
...
Line 0 -- 1, 2, 3
Line 1 -- 4, 5, 6
Line 2 -- 7, 8, 9

正在写入文件

要写入文件,您必须先打开它,这次是使用 w 作为文件打开模式,表示要写入该文件。然后,您可以使用 write() 要写入文件的文件对象的方法:

>>> with open('my_first_file.txt', 'w') as f:
...     f.write('This is smart.')
...     f.write('This is even smarter.')
...
14
21

现在您文件的内容应该是

This is smart.This is even smarter.

它的格式不是很好。因此,您必须注意添加换行符 \n 并相应地隔开:

>>> with open('my_first_file.txt', 'w') as f:
...     f.write('This is smart.\n')
...     f.write('This is even smarter.\n')
...
15
22

随后,您的文件的内容将是

This is smart.
This is even smarter.

摘要

  • 您可以使用 open() 函数在一个 with 声明。

  • 要仅从文件中读取,请使用filemode打开该文件 r 并使用 read() 方法。

  • 要从文件写入,请使用filemode打开该文件 w 并使用 write 方法。