愿关注我们的人都能找到
高薪工作
旧式的字符串格式
%运算符也可以用于字符串格式化。它将左边类似sprintf()-风格的参数应用到右边的参数,然后返回这种格式化操作生成的字符串。例如:
读写文件
open()返回一个文件对象,最常见的用法带有两个参数:open(filename, mode)。
第一个参数是一个含有文件名的字符串(文件有后缀的话要带上后缀)。第二个参数也是一个字符串,含有描述如何使用该文件的几个字符。mode 为’r’ 时表示只是读取文件;w 表示只是写入文件(已经存在的同名文件将被删掉);’a’表示打开文件进行追加,写入到文件中的任何数据将自动添加到末尾。
‘r+’表示打开文件进行读取和写入。mode 参数是可选的,默认为’r’。
通常,文件以文本打开,这意味着,从文件读出和向文件写入的字符串会被特定的编码方式(默认是UTF-8)编码。模式后面的’b’ 以二进制模式打开文件:数据会以字节对象的形式读出和写入。所有不包含文本的文件最好都用这种二进制模式打开文件。
在文本模式下,读取时默认会将平台有关的行结束符(Unix上是\n, Windows上是\r\n)转换为\n。在文本模式下写入时,默认会将出现的\n转换成平台有关的行结束符。这种修改对于ASCII 文本文件没有问题,但会损坏JPEG或EXE 这样的二进制文件中的数据。使用二进制模式读写此类文件时要特别小心。
文件对象的方法
假设文件对象f已经创建。 要读取文件内容,可以调用f.read(size),该方法读取若干数量的数据并以字符串或字节对象返回。size 是可选的数值参数。当size 被省略或者为负数时,将会读取并并返回整个文件;不过最好不要超过机器的内存,否者至多读取和返回size 大小的字节数据。如果到了文件末尾,f.read() 会返回一个空字符串(”)。
注意:读取文件内容是一个字节一个字节从文件头读到文件未,一旦读完了,不会再从头开始,如果还要再用这个文件对象,只能是先把文件关闭,然后重新打开,把文件对象重新赋给这个文件对象,才能做其他操作
f.readline()从文件读取一行数据;字符串结尾会带有一个换行符 (\n) ,只有当文件最后一行没有以换行符结尾时才会省略。这样返回值就不会有混淆,如果f.readline() 返回一个空字符串,那就表示已经达到文件的末尾了。而如果返回一个只包含一个换行符的字符串’\n’,则表示遇到了一个空行,也可以循环遍历文件对象来读取文件中的每一行:
如果想把文件中的所有行读到一个列表中,可以使用或。
f.write(string) 将string 的内容写入文件中并返回写入的字节的数目(这里不是追加,是覆盖)。
如果想写入非字符串数据,需要先将它转换为字符串:
f.tell()返回一个给出文件对象在文件中当前位置的整数,在二进制模式下表示自文件开头的字节数:
若要更改文件对象的位置,可以使用 f.seek(offset,from_what). 新的位置由参考点(from_what)加上offset 计算得来。from_what 值为0表示以文件的开头为参考点,1 表示以当前的文件位置为参考点,2 表示以文件的结尾为参考点。from _what 可以省略,默认值为0,表示以文件的开头作为参考点。
注意这里位置的修改一定要计算好是否在文件中的内容之内
这样也是不行的。在文本文件中(没有以b模式打开),只允许从文件头开始寻找(有个例外是用seek(0,2) 寻找文件的末尾处),而且合法的偏移量只能是 f.tell() 返回的值或者是零。其它任何偏移值都会产生未定义的行为。
使用完一个文件后,调用f.close() 可以关闭它并释放其占有的所有系统资源。调用f.close() 后,如果再尝试使用该文件对象的会报错误。
使用with 关键字能够使文件用完后自动关闭。
可以看到最后文件被关闭。
使用json 存储结构化数据
从文件中读写字符串相对容易,但对于数值来说比较麻烦,因为read()方法只会返回字符串,应将其传入int() 这样的函数,将’123’ 这样的字符串转换为对应的数值123. 但想要保存更为复杂的数据类型,例如嵌套的列表和字典,手工解析和序列化它们将变得更复杂。
Pyhon 允许使用常用的数据交换格式JSON(JavaScript Object Notation)。标准模块json 可以接受Python 数据结构,并将它们转换为字符串表示形式;此过程称为序列化。从字符串表示形式重新构建数据结构称为反序列化。序列化和反序列化的过程,表示该对象的字符串可以存储在文件或数据中,也可以通过网络连接传送给远程的机器。
注:JSON格式经常用于现代应用程序中进行数据交换。如下是用简单的一行代码查看其JSON 字符串表示形式:
dumps() 函数的另外一个变体dump(),直接将对象序列化到一个文本文件,下面例子中x 是上面的列表对象,f 是为写入而打开的一个文本文件对象。
如果f 是为读取而打打开的文本文件对象,需要重新解码对象(相当于是反序列化,就是把字符串还原成对象)
领取专属 10元无门槛券
私享最新 技术干货