如果您查看台式机的背景,您会注意到什么? 文件无处不在,对不对? 我知道我们经常习惯于拥有混乱的桌面习惯,但是这里的要点是我们似乎处理很多文件。
谈到Python,使用Python处理文件当然是可能的,这就是我在本教程中向您介绍的内容。
开启档案
为了对某个文件进行任何操作,我们必须执行的第一个自然过程是打开它。 继续下载Text.txt ,这是我们将用于进行实验的文件。
为了使用Python打开文件,我们将使用open()函数。 如文档中所述:
open()返回文件对象,并且最常与两个参数一起使用:open(文件名,模式)
如上所述,在举一个例子之前, open()
函数将使用两个参数: filename和mode 。 这种设置参数的方法实际上类似于stdio
的(即C) fopen()
。 Filename只是您要打开的文件的名称。 如果该文件不在当前目录中,则还可以提供该文件的路径。 和mode是一个字符串值,指示如何打开文件。 下表显示了不同模式的示例:
模式 | 描述 |
[R | 打开文本文件以供阅读。 流位于文件的开头 |
r + | 开放供阅读和写作。 流位于文件的开头 |
w | 截短为零长度或创建要写入的文本文件。 流位于文件的开头 |
w + | 开放供阅读和写作。 如果该文件不存在,则创建该文件,否则该文件将被截断。 流位于文件的开头 |
一个 | 开放写作。 如果文件不存在,则创建该文件。 流位于文件末尾。 随后对文件的写入将始终在文件的当前结尾处结束 |
a + | 开放供阅读和写作。 如果文件不存在,则创建该文件。 流位于文件末尾。 随后对文件的写入将始终在文件的当前结尾处结束 |
您还可以在Python文档中查看其他模式。
让我们继续打开文件Text.txt 。 只需一行即可完成此操作,如下所示:
text_file = open('Text.txt')
如您在这里看到的,我们没有指定mode
。 要知道open()
使用的默认模式,请输入print text_file
,在这种情况下,您将获得以下信息:
<open file 'Text.txt', mode 'r' at 0x10728c810>
因此,如您所见,默认模式为r
。 此时,您可能没有发现任何事件,但是在此步骤中已完成打开文件的操作。
读取文件
该文件就像一个秘密盒子。 我们在上一步中打开了它,现在我们想看看里面是什么。 读取文件在Python中很简单,可以使用read()
方法来实现,如下所示:
text_file.read()
为了查看上print text_file.read()
语句的输出,请输入print text_file.read()
。 在这种情况下,秘密(内容)将被泄露!
I'm enjoying learning about "file handling" in Python
继续,然后再次键入print text_file.read()
,您会注意到什么? 您可以看到一个空字符串已输出。 这是因为与一次读取一行readline()
即readline()
相比,您已经读取了整个文件。
写入文件
也许您想在我们已经阅读的文件中添加(写)另一个句子或段落。 假设您想添加以下句子: and I'm looking for more
。 可以在Python中使用write()
方法完成此操作,如下所示:
text_file.write('and I\'m looking for more')
糟糕,我们在这里遇到错误:
Traceback (most recent call last):
File "test.py", line 2, in <module>
text_file.write(' and I\'m looking for more')
IOError: File not open for writing
你明白了吗? 还记得我们在第一部分中按如下所示open('Text.txt')
文件时: open('Text.txt')
吗? 由于在该示例中未指定mode
,因此将模式(默认)设置为r
。 这将只允许我们读取文件,在此示例中,我们尝试写入文件。 因此,让我们再次打开文件,但使用write w
模式:
text_file = open('Text.txt', 'w')
现在尝试使用上面的代码再次写出该句子。 你得到了什么? 如前两节所示,让我们open()
并print
read()
文件,以查看文件内部内容:
text_file = open('Text.txt','r')
print text_file.read()
该脚本的输出为:
and I'm looking for more
您期望看到这个新句子以及原始句子,而I'm enjoying learning about "file handling" in Python
,不是吗? 那么它消失在哪里呢? w
模式似乎覆盖了正在写入的文件的内容。 如果您有兴趣保留文档的原始文本,可以使用a
(附加)模式:
text_file = open('Text.txt','a')
text_file.write(' and I\'m looking for more')
在这种情况下,您应该在Text.txt
获得预期的内容:
I'm enjoying learning about "file handling" in Python and I'm looking for more
让我们将到目前为止所学的一切放在一起:
with open('Text.txt', 'r+') as text_file:
print 'The file content BEFORE writing content:'
print text_file.read()
text_file.write(' and I\'m looking for more')
print 'The file content AFTER writing content:'
text_file.seek(0)
print text_file.read()
我们在这里有一些新东西。 让我快速澄清一下。 with...as
允许我们打开文件,处理文件并确保已关闭文件。 另一方面, seek()
允许我们将指针(即光标)移动到文件的其他部分。 例如, seek(0)
表示参考点将是文件的开头。
继续并运行脚本,然后查看输出结果。
关闭档案
习惯在读取或写入后关闭文件,这样可以释放内存。 是的,脚本完成后,Python会自动关闭文件,但是如果您事先不这样做,则任何打开的文件都会占用Python可能会受益的空间。 使用close()
方法可以简单地关闭文件。
让我们来看这个例子:
text_file = open('Text.txt','a+')
print text_file.read()
text_file.write(' and I\'m looking for more')
如果在read()
之后关闭文件,将会发生什么? 也就是说, text_file.close()
。 Python将给出以下异常:
Traceback (most recent call last):
File "test.py", line 4, in <module>
text_file.write(' and I\'m looking for more')
ValueError: I/O operation on closed file
因此,我们得出结论,我们无法读取或写入关闭的文件。
结论
本教程就是这样。 我们已经展示了Python通过我们演示的一些基本操作使其与文件一起使用的容易程度。
您通常使用Python对文件执行哪些其他操作?
翻译自: https://code.tutsplus.com/tutorials/file-handling-in-python--cms-25623