python字段打印带空格_Python进阶讲解:namedtuple和split()

python字段打印带空格_Python进阶讲解:namedtuple和split()_第1张图片

1.namedtuple

Python中的元组(tuple)是大家非常熟悉的类型,它可以存储一个Python对象序列,不过元组与列表有所不同,元组中的元素值是不能被更改的。
由于元组不像字典那样可以为内部的元素命名,因此我们并不知道元组内的元素所表达的意
义,在访问元组的时候也只能通过索引访问其中的元素。 于是Python标准库collections
引入了namedtuple函数,它可以创建一个和元组类似但更为强大的类型——具名元组
(namedtuple),也就是构造一个带字段名的元组。
collections.namedtuple(typename,field_names,*,verbose = False,rename= False,module = None )

其中:

typename:实际上就是你通过namedtuple创建的一个元组的子类的类名,通过这样的方式我们可以初始化各种各样的实例化元组对象。

field_names:类似于字典的key,在这里定义的元组可以通过这样的key去获取里面对应索引位置的元素值,这样的key可以是列表,也可以是用空格、/和逗号这样的分隔符隔开的字符串。

rename:如果rename指定为True,那么你的field_names里面不能包含有非Python标识符,Python中的关键字以及重复的name,如果有,它会默认给你重命成‘_index’的样式,这个index表示该namefield_names中的索引,例:['abc', 'def', 'ghi', 'abc'] 将被转换成['abc', '_1', 'ghi', '_3']

其他俩个不常用,需要的可以查看Python官网教程

collections-集装箱数据类型​docs.python.org
>>>from collections import namedtuple

>>>Point = namedtuple('Point', ['x', 'y'])
>>>p = Point(11, y=22)     # 可以使用关键字参数和位置参数初始化namedtuple

>>> p[0] + p[1]             # 可以使用索引去获取namedtuple里面的元素
33

>>> x, y = p                # 可以将namedtuple拆包
>>> x, y
(11, 22)

>>> p.x + p.y               # 使用对应的字段名字也可以获取namedtuple里面的元素
33

>>> p                       # 使用类似name=value的样式增加了数据的可读性
Point(x=11, y=22)  

除了从元组继承的方法外,命名元组还支持三个附加方法和两个属性。为避免与字段名称冲突,方法和属性名称以下划线开头。

classmethod somenamedtuple._make(可迭代

从现有序列中创建新实例或可迭代的类方法。

>>> t = [11, 22]
>>> Point._make(t)
Point(x=11, y=22)

somenamedtuple._asdict()

返回一个新值OrderedDict,它将字段名称映射到其相应的值:

>>> p = Point(x=11, y=22)
>>> p._asdict()
OrderedDict([('x', 11), ('y', 22)])

somenamedtuple._replace(** kwargs

返回命名元组的新实例,用新值替换指定字段:

>>> p = Point(x=11, y=22)
>>> p._replace(x=33)
Point(x=33, y=22)

>>> for partnum, record in inventory.items():
...     inventory[partnum] = record._replace(price=newprices[partnum], timestamp=time.now())

somenamedtuple._source

具有纯Python源代码的字符串,用于创建命名的tuple类。源使命名的元组自记录。可以打印,使用执行exec()或将其保存到文件中并导入。

somenamedtuple._fields

列出字段名称的字符串元组。对于自省和从现有命名元组创建新的命名元组类型很有用。

# 可以通过这个属性获取namedtuple对象当前的所有字段名field_names
 >>> p._fields            # 获取 field_names,注意是元组形式
 ('x', 'y')
 
 >>> Color = namedtuple('Color', 'red green blue')
 >>> Pixel = namedtuple('Pixel', Point._fields + Color._fields)
 >>> Pixel(11, 22, 128, 255, 0)
 Pixel(x=11, y=22, red=128, green=255, blue=0)  
 
 # 还可以通过getattr来获取字段名是字符串的元素的值value
 >>> getattr(p, 'x')
 11

 # 把字典通过拆包的形式转换成namedtuple
 >>> d = {
      'x': 11, 'y': 22}
 >>> Point(**d)
 Point(x=11, y=22)
 
 # 还可以通过自定义namedtuple子类方法实现一些计算的功能和格式化输出的功能
 >>> class Point(namedtuple('Point', ['x', 'y'])):
 ...     __slots__ = ()
 ...     @property
 ...     def hypot(self):
 ...         return (self.x ** 2 + self.y ** 2) ** 0.5
 ...     def __str__(self):
 ...         return 'Point: x=%6.3f  y=%6.3f  hypot=%6.3f' % (self.x, self.y, self.hypot)
 
 >>> for p in Point(3, 4), Point(14, 5/7):
 ...     print(p)
 Point: x= 3.000  y= 4.000  hypot= 5.000
 Point: x=14.000  y= 0.714  hypot=14.018
 
 # 一般给namedtuple添加新的字段我们通过_fields就可以快速完成,而无法通过定义子类方法来完成
 >>> Point3D = namedtuple('Point3D', Point._fields + ('z',))
 
 # 我们可以通过给namedtuple的__doc__属性赋值来修改或添加相应的文档描述
 >>> Book = namedtuple('Book', ['id', 'title', 'authors'])
 >>> Book.__doc__ += ': Hardcover book in active collection'
 >>> Book.id.__doc__ = '13-digit ISBN'
 >>> Book.title.__doc__ = 'Title of first printing'
 >>> Book.authors.__doc__ = 'List of authors sorted by last name'  

2.split()——拆分字符串

通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)

str.split(str="",num=string.count(str))[n]

参数说明:

str:表示为分隔符,默认为空格,但是不能为空('')。若字符串中没有分隔符,则把整个字符串作为列表的一个元素。例如:s.split('')是不合法的表达

num:表示分割次数。如果存在参数num,则仅分隔成 num+1 个子字符串,并且每一个子字符串可以赋给新的变量

[n]:表示选取第n个分片

当使用空格作为分隔符时,对于中间为空的项会自动忽略
split()当不带参数时以空格进行分割(不管几个空格全部砍掉),当代参数时,以该参数进行分割。
>>> str = 'hello world'
>>> print(str.split( ))
['hello', 'world']
>>>

1.以'.'为分隔符

>>> str = 'hello.world'
>>> print(str.split('.'))
['hello', 'world']
>>>

2.分割一次

>>> str = 'hello python language'
>>> print(str.split(' ', 1))
['hello', 'python language']
>>>

3.分割两次,取第一个分片(序号为0)

>>> str = 'hello python language'
>>> str.split(' ', 2)[0]
'hello'
>>>

4.分割两次,并把分割后的三个部分保存到三个变量中

>>> str = 'hello python language'
>>> s1, s2, s3=str.split(' ', 2)
>>> s1
'hello'
>>> s2
'python'
>>> s3
'language'
>>>

你可能感兴趣的:(python字段打印带空格)