文件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 当时还不存在。它有一个巨大的缺点,那就是您必须注意关闭文件。如果在以下情况下引发错误 open
和 close
它根本就没有关门。 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
方法。