Python 3.7.x 介绍 -4 输入和输出

Posted 「已注销」

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 3.7.x 介绍 -4 输入和输出相关的知识,希望对你有一定的参考价值。

输入和输出

等好的输出格式控制

到目前为止,我们遇到了两种写入值的方法:表达式语句和print()函数。 要使用格式化的字符串文字,请在开始引号或三引号之前键入一个带有f或F的字符串。

>>> year = 2016
>>> event = 'Referendum'
>>> f'Results of the year event'
'Results of the 2016 Referendum'

字符串的str.format()方法需要更多多变的形式。

>>> yes_votes = 42_572_654
>>> no_votes = 43_132_495
>>> percentage = yes_votes / (yes_votes + no_votes)
>>> ':-9 YES votes  :2.2%'.format(yes_votes, percentage)
' 42572654 YES votes  49.67%'

str()函数用于返回值相当于人类可读的值的表示,而repr()用于生成可由解释器读取的表示

1格式化字符串文字
格式化的字符串文字(也简称为f字符串)允许您通过在字符串前面加上f或F并将表达式写为expression来在字符串中包含Python表达式的值

>>> import math
>>> print(f'The value of pi is approximately math.pi:.3f.')
The value of pi is approximately 3.142.
>>> table = 'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678
>>> for name, phone in table.items():
...     print(f'name:10 ==> phone:10d')
...
Sjoerd     ==>       4127
Jack       ==>       4098
Dcab       ==>       7678

其他修饰符可用于在格式化之前转换值。 ‘!a’对应ascii(),’!s’对应str(),’!r’对应repr():

>>> animals = 'eels'
>>> print(f'My hovercraft is full of animals.')
My hovercraft is full of eels.
>>> print(f'My hovercraft is full of animals!r.')
My hovercraft is full of 'eels'.

2 String format()方法

>>> print('We are the  who say "!"'.format('knights', 'Ni'))
We are the knights who say "Ni!"
>>> print('0 and 1'.format('spam', 'eggs'))
spam and eggs
>>> print('1 and 0'.format('spam', 'eggs'))
eggs and spam

如果你有一个非常长的格式字符串,你不想拆分,那么如果你可以引用要按名称而不是位置格式化的变量。 这可以通过简单地传递dict(映射集合)并使用方括号’[]'来访问键值

>>> table = 'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678
>>> print('Jack: 0[Jack]:d; Sjoerd: 0[Sjoerd]:d; '
...       'Dcab: 0[Dcab]:d'.format(table))
Jack: 4098; Sjoerd: 4127; Dcab: 8637678

3 手动格式化字符串
字符串对象的str.rjust()方法通过在左侧填充空格来对给定宽度的字段中的字符串进行右对齐。 str.ljust()和str.center()有类似的方法。

>>> for x in range(1, 11):
...     print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
...     # Note use of 'end' on previous line
...     print(repr(x*x*x).rjust(4))
...
 1   1    1
 2   4    8
 3   9   27
 4  16   64
 5  25  125
 6  36  216
 7  49  343
 8  64  512
 9  81  729
10 100 1000

还有另一种方法str.zfill(),用零填充左边的数字字符串。它了解正负号:

>>> '12'.zfill(5)
'00012'
>>> '-3.14'.zfill(7)
'-003.14'
>>> '3.14159265359'.zfill(5)
'3.14159265359'

4 老的格式化字符串方法
%运算符也可用于字符串格式化。它将左参数解释为类似于应用于右参数的sprintf()样式格式字符串,并返回由此格式化操作产生的字符串。

读写文件

>>> f = open('workfile', 'w')

第一个参数是包含文件名的字符串。 第二个参数是另一个字符串,其中包含一些描述文件使用方式的字符。 当只读取文件时,模式可以是’r’,'w’等。在处理文件对象时,最好使用with关键字。 优点是文件在套件完成后正确关闭,即使在某个时刻引发了异常。 使用with也比编写等效的try-finally块短得多:

>>> with open('workfile') as f:
...     read_data = f.read()
>>> f.closed
True

1 文件操作的函数
本节中的其余示例将假定已创建名为f的文件对象。

>>> f.read()
'This is the entire file.\\n'
>>> f.read()
''
>>> f.readline()
'This is the first line of the file.\\n'
>>> f.readline()
'Second line of the file\\n'
>>> f.readline()
''
>>> for line in f:
...     print(line, end='')
...
This is the first line of the file.
Second line of the file

如果要读取列表中文件的所有行,还可以使用list(f)或f.readlines()。 f.write(string)将string的内容写入文件,返回写入的字符数。

>>> f.write('This is a test\\n')
15

f.tell()返回一个整数,给出文件对象在文件中的当前位置,表示为二进制模式下文件开头的字节数和文本模式下的不透明数字。

>>> f = open('workfile', 'rb+')
>>> f.write(b'0123456789abcdef')
16
>>> f.seek(5)      # Go to the 6th byte in the file
5
>>> f.read(1)
b'5'
>>> f.seek(-3, 2)  # Go to the 3rd byte before the end
13
>>> f.read(1)
b'd'

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

>>> import json
>>> json.dumps([1, 'simple', 'list'])
'[1, "simple", "list"]'

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

json.dump(x, f)

要再次解码对象,如果f是已打开以供阅读的文本文件对象:

x = json.load(f)

以上是关于Python 3.7.x 介绍 -4 输入和输出的主要内容,如果未能解决你的问题,请参考以下文章

Python 3.7.x 介绍-5 错误和异常处理

Python 3.7.x 介绍-6类

Python 3.7.x 介绍-1概述

Python 3.7.x 介绍-7 标准库

Linux 第三天 重定负管道符环境变量

python数据结构之输入输出控制和异常