我们上一章学习了python的推导式,这个内容是python独具特色的,列如列表推导式和生成器。对于初学者来说,可以忽略这章内容,在熟练掌握列表、字典的常规操作之后,可以尝试去练习。要说它有什么用?就列如我们住进一所房子,同样是卧室、厕所、厨房具备,但另一所房子装修得更精美和舒服。
我的感觉就是如此。对于编写程序的第一要务是完成功能目标,美化是其次。而对于专业的程序员来说,就要追求代码的美观和效率。推导式、生成器就是让你编写的程序看起来更加高大上,更加节省空间和提升效率。
这一章我们学习python的输入和输出,之前的章节我们也学过一些简单的输入输出,列如print函数就是常见的输出函数,input函数是常见的输入函数。这一章在此基础上进行细化,并增加读写文件的功能。
Python两种输出值的方式: 表达式语句和 print() 函数。
第三种方式是使用文件对象的 write() 方法,标准输出文件可以用 sys.stdout 引用。
如果你希望输出的形式更加多样,可以使用 str.format() 函数来格式化输出值。
如果你希望将输出的值转成字符串,可以使用 repr() 或 str() 函数来实现。

格式化输出
输出结果如下:

输出结果

数字的格式化
输出结果如下:

输出结果
这里有两种方式输出一个平方与立方的表:

格式对齐
输出结果如下:

输出结果
注意:在第一个例子中, 每列间的空格由 print() 添加。
这个例子展示了字符串对象的 rjust() 方法, 它可以将字符串靠右, 并在左边填充空格。
还有类似的方法, 如 ljust() 和 center()。 这些方法并不会写任何东西, 它们仅仅返回新的字符串。
另一个方法 zfill(), 它会在数字的左边填充 0,如下所示:

浮点数的补零
输出结果如下:

从上面看出,如果浮点数本身的长度超过zfill的数字就无效了
str.format() 的基本使用如下:

format的使用
输出结果如下:

输出结果
括号及其里面的字符 (称作格式化字段) 将会被 format() 中的参数替换。
在括号中的数字用于指向传入对象在 format() 中的位置,如下所示:

format的参数替换
输出结果如下:

输出结果
如果在 format() 中使用了关键字参数, 那么它们的值会指向使用该名字的参数。

format的关键字参数
输出结果如下:

输出结果
位置及关键字参数可以任意的结合:

format的参数灵活使用
输出结果如下:

输出结果
可选项 : 和格式标识符可以跟着字段名。 这就允许对值进行更好的格式化。 下面的例子将 Pi 保留到小数点后三位:

浮点数的格式化
输出结果如下:

输出结果
读取键盘输入
Python 提供了 input() 内置函数从标准输入读入一行文本,默认的标准输入是键盘。

读取键盘的输入
输出结果如下:

输出结果
open() 将会返回一个 file 对象,基本语法格式如下:
open(filename, mode)
|
以下实例将字符串写入到文件 foo.txt 中:

打开文件写字符串
输出结果写入文件foo.txt,在windows的cmd下可以查看:

查看写入的文件内容
本节中的例子假设已经创建了一个称为 f 的文件对象。
f.read()
为了读取一个文件的内容,调用 f.read(size), 这将读取必定数目的数据, 然后作为字符串或字节对象返回。
size 是一个可选的数字类型的参数。 当 size 被忽略了或者为负, 那么该文件的所有内容都将被读取并且返回。
以下实例假定文件 foo.txt 已存在(上面实例中已创建):

打开文件读取内容
输出结果如下:

输出结果
f.readline()
f.readline() 会从文件中读取单独的一行。换行符为 ' '。f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行。

按行读取文件
输出结果如下:

输出内容
f.readlines()
f.readlines() 将返回该文件中包含的所有行。
如果设置可选参数 sizehint, 则读取指定长度的字节, 并且将这些字节按行分割。

读取多行内容
输出结果如下:

输出内容
另一种方式是迭代一个文件对象然后读取每行:

遍历文件内容
输出结果如下:

输出内容
f.write()
f.write(string) 将 string 写入到文件中, 然后返回写入的字符数。

计算写入文件的字符数
输出结果如下:

输出内容
如果要写入一些不是字符串的东西, 那么将需要先进行转换:

写入文件的内容必须是字符串
在pycharm的终端界面,可以用type命令查看foo1.txt内容:

查看文件内容
f.tell()
f.tell() 用于返回文件当前的读/写位置(即文件指针的位置)。文件指针表明从文件开头开始的字节数偏移量。f.tell() 返回一个整数,表明文件指针的当前位置。
f.seek()
如果要改变文件指针当前的位置, 可以使用 f.seek(offset, from_what) 函数。
f.seek(offset, whence) 用于移动文件指针到指定位置。
offset 表明相对于 whence 参数的偏移量,from_what 的值, 如果是 0 表明开头, 如果是 1 表明当前位置, 2 表明文件的结尾,例如:
from_what 值为默认为0,即文件开头。下面给出一个完整的例子:

文件的指针和偏移量
输出结果如下:

输出结果
f.close()
在文本文件中 (那些打开文件的模式下没有 b 的), 只会相对于文件起始位置进行定位。
当你处理完一个文件后, 调用 f.close() 来关闭文件并释放系统的资源,如果尝试再调用该文件,则会抛出异常。
当处理一个文件对象时, 使用 with 关键字是超级好的方式。在结束后, 它会帮你正确的关闭文件。 而且写起来也比 try - finally 语句块要简短:
with open('foo.txt', 'r') as f: ... read_data = f.read() |
python的pickle模块实现了基本的数据序列和反序列化。
通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。
通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
基本接口:
pickle.dump(obj, file, [,protocol]) 有了 pickle 这个对象, 就能对 file 以读取的形式打开: x = pickle.load(file) |
注解:从 file 中读取一个字符串,并将它重构为原来的python对象。
file: 类文件对象,有read()和readline()接口。

pickle的使用
输出如下:

输出结果
今天我们学习了python语言的输入输出,包括格式化字符串、数字的输出及文件的读写。这部分内容超级重大,由于计算机语言本质上就是完成输入、输出的过程。对于pickle模块,是比较特殊的功能。对于初学者可以忽略,但这个功能在一些特定场景需要持久化存储数据对象方面有价值。
让我们保持学习热烈,多做练习,我们下期再见!

python与人工智能