欢迎回来!如果您还记得以前的几次培训课程,我们介绍了基本的文件I/O。 这是使我们的脚本适用于现实生活场景中的一个非常重要的步骤,今天我们将要深入这些概念。
我们今天将介绍三种I/O模式,让我们花点时间将其展示出来:
现在我们已经通过了我们将要涉及的模式的简要介绍,让我们来看看它,并从r+ 模式开始!
使用高级Reading模式
首先,由于r+模式不是首字母缩略词,所以我把它称为高级Reading模式,我将在本次培训课程的剩余部分中提到这一点。
那么,如果我们要执行一些文件I/O,我们需要一个文件。让我们继续使用touch和cat命令来创建我们的文件并添加一些文本:
~# touch test~# cat testLine 1Line 2Line 3 |
---|
现在我们有一个文件,让我们启动我们可信的Python环境并做一些I/O操作!
如果您从前面的文件I/O课程中记得,我们可以通过打开别名下的文件来自动执行打开和关闭过程。
这是通过关键字with一个标准的打开函数,然后通过关键字as作为别名(通常命名为文件)进行处理的。 让我们来看看这个语法,我们将读取我们的文件,并写一个新的行:
>>> with open(‘test’, ‘r+’) as fd:... lines = fd.readlines()... fd.write(‘Line 4\n’)... |
---|
现在,我们来仔细分析一下,我们已经使用了一种新的方法,fd.readlines()。
该方法逐行读取文件,并将每行都生成一个列表作为自己的元素,然后我们调用标准的fd.write()方法将第四行添加到文件中。
现在,让我们继续并打印我们的新列表:
>>> lines[‘Line 1\n’, ‘Line 2\n’, ’Line 3\n’] |
---|
但是,我们必须记住,自从Python逐行读取之后,我们的文件已经在我们写入之前就被读取了。所以我们的文件内容与我们列表的内容不匹配,让我们继续前进并捕获我们的文件以查看其差异:
#~ cat testLine 1Line 2Line 3Line 4 |
---|
我们写进去了!我们可以使用高级Reading(r+)模式同时读取和写入文件。现在,我们来看看rb和wb模式!
使用读/写的二进制模式
正如你可以通过上面的标题所说的,rb和wb代表读二进制和写二进制。这使得读取和写入二进制文件变得容易。
如果我们要读取二进制文件,我们需要一个文件来读取。我们将编译一个简单的C程序来打印[Hello,World!]到终端,让我们现在创建我们的文件:
~# touch test.c~# cat test.c#include <stdio.h> int main(void){printf(“Hello, World!\n”);return 0;}~# gcc test.c -o test~# ./testHello, World! |
---|
我不会解释这是因为这是一个Python课程,而不是C课程。
既然我们有我们的二进制文件,测试,我们可以使用我们的二进制读/写模式。 让我们回到我们的Python shell并用rb模式打开我们的二进制文件:
>>> with open(‘test’, ‘rb’) as file:... tfile = file.read()...>>> print tfile |
---|
现在,当我们执行这个打印语句时,大量的乱码将被打印到屏幕上。 我们无法阅读,但我们的系统知道这意味着什么。让我们执行此打印语句以查看二进制文件:
图19.1
图19.2
我们唯一可以看到的是文字[Hello,World!],其他的都只是无意义的,这是打印二进制文件内容的结果。
现在我们将二进制文件的内容存储在变量下,让我们创建一个新文件并将二进制内容写入它。
如果我们试图打开一个在Reading模式下不存在的文件,该文件将在打开的函数中指定的地方创建。
让我们打开一个名为test2的新文件,并将它的二进制输出写入它:
>>> with open(‘test2’, ‘wb’) as file2:... file.write(tfile)...>>> |
---|
现在我们已经将这个二进制代码写入了一个文件,我们可以像原来那样真正执行这个文件。我们来演示这个并执行我们的新文件:
~# ./test2Hello, World! |
---|
成功了!我们能够有效地复制我们的二进制文件并执行它,这些模式并不是经常使用,但是如果您遇到这些模式,这些模式却会很有用。
总结
我们在这里讲解了很多,所以我希望你能很好的理解我们所讲解的内容。 高级阅读模式可用于执行大量文件的I/O操作。老实说,二进制模式不会经常使用,但如果它们存在,我们就会想知道怎么使用!
接下来的文章对于这个系列将非常重要,所以你不会想错过它的,我会在下一篇文章中看到你们!
练习
使用今天所学的Python知识,把Linux /usr/bin/ 目录下的所有文件拼接成一个文件,并保存在本地。