Python入门八输入与输出

Fancier输出格式

到目前为止,我们遇到了两种写值的方法:表达式语句print()函数。(第三种方法是使用write()文件对象的方法;标准输出文件可以作为参考sys.stdout。有关详细信息,请参阅库参考。)

通常,您需要更多地控制输出的格式,而不仅仅是打印空格分隔的值。有几种格式化输出的方法。

要使用格式化的字符串文字,请在开始引号或三引号之前fF之前开始一个字符串。在这个字符串中,你可以在{} 字符之间写一个Python表达式,它可以引用变量或文字值。

str.format()字符串的方法需要更多的手动操作。您仍将使用{}标记变量将被替换的位置,并且可以提供详细的格式化指令,但您还需要提供要格式化的信息

最后,您可以使用字符串切片和连接操作自己完成所有字符串处理,以创建您可以想象的任何布局。字符串类型有一些方法可以执行将字符串填充到给定列宽的有用操作。

当您不需要花哨的输出但只是想快速显示某些变量以进行调试时,您可以将任何值转换为带有repr()或者str()函数的字符串

str()函数用于返回值相当于人类可读的值的表示,同时repr()用于生成可由解释器读取的表示(或者SyntaxError如果没有等效语法则强制执行)。对于没有特定人类消费表示的对象,str()将返回相同的值repr()。许多值,例如数字或结构(如集合和字典),使用任一函数都具有相同的表示。特别是字符串有两个不同的表示。

string模块包含一个Template类,它提供了另一种将值替换为字符串的方法,使用占位符, $x并用字典中的值替换它们,但提供的格式控制要少得多

 

读写文件

open()返回一个文件对象,最常用的有两个参数:。open(filename, mode)

第一个参数是包含文件名的字符串。第二个参数是另一个字符串,其中包含一些描述文件使用方式的字符。 模式可以是'r'仅读取文件时,'w' 仅写入(将删除同名的现有文件),并 'a'打开文件进行追加; 写入文件的任何数据都会自动添加到最后。 'r+'打开文件进行读写。

通常,文件以文本模式打开,这意味着您从文件读取和写入文件,这些文件以特定编码进行编码。如果未指定编码,则默认值取决于平台(请参阅参考资料 open())。'b'附加到模式后以二进制模式打开文件 :现在以bytes对象的形式读取和写入数据。此模式应用于所有不包含文本的文件。

在文本模式下,读取时的默认设置是将平台特定的行结尾(\n在Unix上,\r\n在Windows上)转换为just \n。在文本模式下写入时,默认设置是将事件的发生转换\n为特定于平台的行结尾。这幕后的修改文件数据精细的文本文件,但会喜欢,在破坏了二进制数据 JPEGEXE文件。在读取和写入此类文件时要非常小心地使用二进制模式。

with在处理文件对象时,最好使用关键字。优点是文件在套件完成后正确关闭,即使在某个时刻引发了异常。使用with也比写相当于短得多tryfinally块:

如果您没有使用该with关键字,那么您应该调用 f.close()以关闭该文件并立即释放它使用的任何系统资源。如果您没有显式关闭文件,Python的垃圾收集器最终将销毁该对象并为您关闭打开的文件,但该文件可能会保持打开状态一段时间。另一个风险是不同的Python实现将在不同的时间进行清理。

通过with语句或通过调用关闭文件对象后file.close(),继续使用该文件对象将自动失败。

with 关键字与closed方法不需要同时使用  因为当使用with关键字后会自动关闭当前文件,当使用with关键字后在对文件操作会抛出异常

 

文件对象的方法

本节中的其余示例将假定file为已创建的文件对象 

要读取文件的内容,请调用file.read(size),读取一些数据并将其作为字符串(在文本模式下)或字节对象(在二进制模式下)返回。 size是可选的数字参数。当省略size或negative时,将读取并返回文件的全部内容; 如果文件的大小是机器内存的两倍,那么这就是你的问题。否则,最多读取并返回大小字节。如果已到达文件末尾,file.read()则返回空字符串('')。

等效于

这是内存高效,快速,并极为简单的代码,如果要读取列表中文件的所有行,也可以使用 list(f)f.readlines()

file.write(string)string的内容写入文件,返回写入的字符数。

注意此时需要指定有写权限,否则将抛出异常

在编写之前,需要将其他类型的对象转换为字符串(在文本模式下)或字节对象(在二进制模式下):

file.tell() 返回一个整数,表示为二进制模式下文件开头的字节数和文本模式下的不透明数字(就是当前文件内容的字节总数)。

使用保存结构化数据json

可以轻松地将字符串写入文件并从文件中读取。数字需要更多的努力,因为该read()方法只返回字符串,必须将其传递给类似的函数int(),它接受类似字符串'123' 并返回其数值123.当您想要保存更复杂的数据类型(如嵌套列表和字典,手工解析和序列化变得复杂。

Python允许您使用称为JSON(JavaScript Object Notation)的流行数据交换格式,而不是让用户不断编写和调试代码以将复杂的数据类型保存到文件中。调用的标准模块json可以采用Python数据层次结构,并将它们转换为字符串表示形式; 这个过程称为序列化。从字符串表示中重建数据称为反序列化。在序列化和反序列化之间,表示对象的字符串可能已存储在文件或数据中,或通过网络连接发送到某个远程机器。

注意

JSON格式通常被现代应用程序用于允许数据交换。许多程序员已经熟悉它,这使其成为互操作性的良好选择

如果您有一个对象x,则可以使用一行简单的代码查看其JSON字符串表示:

dumps()调用该函数的另一个变体dump(),只是将对象序列化为文本文件。因此,如果file是一个 文本文件,对象为写入打开,我们可以这样做:

注意:操作文件时一定要注意权限设置

读取文件

这种简单的序列化技术可以处理列表和字典,但是在JSON中序列化任意类实例需要额外的努力。该json模块的参考包含对此的解释。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值