7.1.更加复杂的输出格式
格式化字符串字面值
在字符串开头的引号/三引号之前加f/F 特性:可以通过{}在字符之间输入引用的变量,或者字面值的Python表达式 例子如下:
| |
str.format():
特性:1.同上,但你需要提供详细的格式化指令和待格式化的信息 例子:
| |
解释: 注意此处的输出 -9:"-“表示只有在复数是才显示负号,+表示总是显示正负号 例如 {’’:+’’}.format(100) 输出+100; {’’:+’’}.format(-100) 输出-100; {’’:-’’}.format(100) 输出100; {’’:-’’}.format(-100) 输出-100; ‘9’表示最小宽度,没有达到则需要填充,比如上面只有八位,在前面填充了一个空格; {:2.2%} : 第一个2也表示整数部分最小宽度,因达到两位所以无影响 第二个2表示小数点后保留两位; 百分号表示用%表示
str()和repr():把值转化成字符串
不需要花哨输出,用于快速显示变量进行调试
string 模块通过 string.Template 提供了一种基于正则表达式的简单模板方法支持。
这种方式为字符串中的值替换提供了另一种途径:使用类似 $x 的占位符,并将其替换为字典中的对应值。该语法使用简便,但在格式控制方面提供的功能较为有限。
7.1.1.格式化字符串字面值
字符串前夹f或F,通过{expression}表达式,把Python变量引入字符串中
格式说明符:可选,便于更好控制格式化值的方式,写在表达式的后面
例1:将pi舍入到小数点后三维 {math.pi:.3f}
例2:再:传递整数,表示最小字符宽度,常于用列对齐
常用于格式化的修饰符及其作用:
'!a' 应用 ascii() ,'!s' 应用 str(),'!r' 应用 repr():
=的作用:{expression = }将其拓展为 expression = value
7.1.2.字符串format方法
基本用法: 例1:
| |
{}替换为传递给format方法的对象: {}内的数字:表示传递的对象的位置,例如
| |
通过关键字参数名引入value
例:
| |
关键词参数和位置参数可以组合使用,例如:
| |
按名称引入变量进行格式化。可以通过字典传递,使用[]进行访问 例如:
| |
详解:此处的{0[Jack]:d}中参数的含义 0表示第零个参数,即table这个字典,Jack为关键字参数不必多说,:d表示demical,用十进制表示,绝非double 除此之外,此处的table还可以通过**作为参数,此时就不需要通过[]来访问了 例如
| |
7.1.3.手动格式化字符串
蠢蠢的,自己看
7.1.4.旧式字符串格式化方法
%用于字符串插值,感觉也蠢蠢的
| |
7.2.读写文件
open()的应用: 返回值:一个file object,参数open(filename,mode,encoding = none) 各个参数的意义: filename:文件名字符串 mode:描述对文件的操作,包含以下几种值: r:read only,表示只读 w:表示只写 a:表示打开文件并追加内容,将写入的数据写入文件末尾 r+:进行读写 默认值为r encoding:选择的编码,一般默认UTF-8;在模式后面加b,可以使用binary mode打开文件,二级制数据以bytes对象形式进行读写的,该情况不允许指定encoding 而默认情况是以text mode打开 读取文件,会把平台特定的行终结符统一转化为\n,而写入时,又会转化为平台对应的终结符 但是该操作会破坏二级制文件中的数据,这类数据只能通过二级制模式读写
with关键字:优点:字句结束后,文件会正确关闭,且代码更简洁
| |
没有with关键字,应通过f.close()关闭文件,释放资源, 若未使用close()关闭文件或者with关键字,可能导致写入的参数未写入磁盘
7.2.1.文件对象的方法
前提:已创建f文件对象 f.read(size):用于读取文件内容 返回值:字符串(文本模式),字节串(二进制模式) size:可选。默认值或复数:读取整个文件内容;其他值:读取size个字符或者size个字节 到达文件末尾返回空字符串’ ‘ f.readline():从文件中读取单行字符串 保留换行符’\n’,例如
| |
只有在文件不以换行符结尾才省略换行符 若需要读取多行,通过循环遍历整个文件对象:
| |
如果需要以列表形式读取,则可以用list(f)或者f.readline() f.write(string):把string内容写入文件并返回写入的字符数 写入其他类型时,要先做类型转化,转化为string或者bytes
f.seek(offset,whence)改变文件对象的位置
通过参考点添加offset计算位置
参考点有whence指定:0:从文件开头;1:使用当前文件位置;2:使用文件末尾
默认值为0
可以和f.tell()搭配使用
在文本文件(模式字符串未使用 b 时打开的文件)中,只允许相对于文件开头搜索(使用 seek(0, 2) 搜索到文件末尾是个例外),唯一有效的 offset 值是能从 f.tell() 中返回的,或 0。其他 offset 值都会产生未定义的行为。
7.2.2. 使用 json 保存结构化数据¶
字符串可以很容易地写入文件或从文件中读取。 数字则更麻烦一些,因为 read() 方法只返回字符串,而字符串必须传给 int() 这样的函数,它接受 '123' 这样的字符串并返回其数值 123。 当你想要保存嵌套列表和字典等更复杂的数据类型时,手动执行解析和序列化操作将会变得非常复杂。
Python 允许你使用流行的数据交换格式 JSON (JavaScript Object Notation),而不是让用户持续编写和调试代码来将复杂的数据类型存入文件中。 标准库模块 json 可以接受带有层级结构的 Python 数据,并将其转换为字符串表示形式;这个过程称为 serializing。 根据字符串表示形式JSON重建数据则称为 deserializing。 在序列化和反序列化之间,用于代表对象的字符串可以存储在文件或数据库中,或者通过网络连接发送到远端主机。
备注
JSON 格式通常用于现代应用程序的数据交换。程序员早已对它耳熟能详,可谓是交互操作的不二之选。
只需一行简单的代码即可查看某个对象的 JSON 字符串表现形式:
| |
dumps() 函数还有一个变体, dump() ,它只将对象序列化为 text file 。因此,如果 f 是 text file 对象,可以这样做:
| |
要再次解码对象,如果 f 是已打开、供读取的 binary file 或 text file 对象:
| |
备注
JSON 文件必须以 UTF-8 编码。当打开 JSON 文件作为一个 text file 用于读写时,使用 encoding="utf-8" 。
这种简单的序列化技术可以处理列表和字典,但在 JSON 中序列化任意类的实例,则需要付出额外努力。json 模块的参考包含对此的解释。