NMT Data Mining & Big Data

字符串方法总结

2019-03-24
NMt

本篇博客是收集关于str方法,并针对每个方法配有示例。函数的分类主要参考老师的课件。

@@@@

字符串的类型判断

  • str.isdigit()

  • str.isdecimal()

  • str.isnumeric()

查看字符串里的字符是否全为数字。如果字符串中的所有字符全部都是数字,并且至少有一个字符则返回true,否则为False

>>> s1 = '123456'
>>> s1.isdigit()
True
>>> s2 = '123sadf'
>>> s2.isdigit()
False
>>> s1.isdecimal()
True
>>> s2.isdecimal()
False
>>> s1.isnumeric()
True
>>> s2.isnumeric()
False

注:对于非Unicode字符串,上面三个方法是等价的。

  • str.isalpha() 查看字符串中的字符是否全部为字母(包括大小写)
>>> s1 = 'hjdfHKJbjh'
>>> s1.isalpha()
True
>>> s2 = 'HjnH12H.'
>>> s2.isalpha()
False
  • str.isalnum() 如果字符串中的字符全部为字符或是数字。如果字符串中的所有字符都为字母或数字,则返回True, 否则返回False
>>> s3 = '13246'
>>> s3.isalnum()
True
>>> s4 = 'sf123'
>>> s4.isalnum()
True
>>> s5 = 'sfd12.?csd'
>>> s5.isalnum()
False
  • str.islower() 判断字符串中所含有的字母是否全部都为小写。(非字母的数字忽略不看)如果没有字母或者字母全为小写则返回True, 否则返回False
>>> s5 = 'sfd12.?csd'
>>> s5.islower()
True
  • str.isupper() 判断字符串中所含有的字母是否全部都为大写。(非字母的数字忽略不看)如果没有字母或者字母全为大写则返回True, 否则返回False
>>> s7 = 'VHBHB123.JH'
>>> s7.isupper()
True
  • str.istitle() 判断字符串中的每一个单词的第一个字母是否为大写。(标题一般都是每个单词的首字母大写)
>>> s8 = 'I Love Python.'
>>> s8.istitle()
True
  • str.isspace() 查看字符串中的字符是否全部都为空白字符。
>>> s9 = '\n'
>>> s9.isspace()
True
>>> s9 = '\n h'
>>> s9.isspace()
False

注:空不是空白字符,空白字符包括空格、换行、换页等。

  • str.isidentifier() 检查字符串是否符合python变量命名规则。
>>> s10 = '_hello_'
>>> s10.isidentifier()
True
>>> s11 = '1cd'
>>> s11.isidentifier()
False

注:变量名命名规则是以字母或下划线开头,不能用数字开头。变量名中只能包含字母、数字、下划线

  • str.isprintable() 判断字符串是否全部是可打印字符。(制表符、换行符是不可打印字符,空格是可打印字符)
>>> s12 = ' '
>>> s12.isprintable()
True
>>> s13 = 'as\n'
>>> s13.isprintable()
False
  • str.isascii() 入轨字符串为空或字符串中的所有字符都是ASCII,则返回true,否则返回False

注:3.7中的新功能,我用的3.6版本,因此不进行演示。

大小写转换

  • str.lower() 将字符串中所有字母转换成小写。
>>> S = 'abcDFdsJ'
>>> S.lower()
'abcdfdsj'
  • str.upper() 将字符串中所有字母转换成大写。
>>> S = 'abcDFdsJ'
>>> S.upper()
'ABCDFDSJ'
  • str.capitalize() 将字符串中的首字母转换成大写,其他变为小写。
>>> s = 'anfGHB sncHd HncdH'
>>> s.capitalize()
'Anfghb snchd hncdh'
  • str.title() 将字符串中所有单词的首字母转换成大写,其他转换成小写。
>>> s = 'anfGHB sncHd HncdH'
>>> s.title()
'Anfghb Snchd Hncdh'
  • str.swapcase() 将字符串中的答谢转换成小写,小写转换成大写。
>>> s = 'anfGHB sncHd HncdH'
>>> s.swapcase()
'ANFghb SNChD hNCDh'
  • str.casefold() 类似于函数lower(), 但是它旨在删除字符串中的所有大小写区别。
>>> s = 'anfGHB sncHd HncdH'
>>> s.casefold()
'anfghb snchd hncdh'

字符串的填充与对齐

  • bytes.center(width[, fillbyte]) 将字符串居中输出,width是输出字符的总长度。
>>> s1 = 'python'
>>> s1.center(50)
'                      python                      '
  • str.ljust() 将字符串左对齐输出,width是输出字符的总长度。
>>> s1 = 'python'
>>> s1.ljust(40)
'python                                  '
  • str.rjust() 将字符串右对齐输出,width是输出字符的总长度。
>>> s1 = 'python'
>>> s1.rjust(40)
'                                  python'
  • str.zfill() 将字符串的左端用”0”进行填充。
>>> s2 = '13456'
>>> s2.zfill(10)
'0000013456'
  • str.expandtabs(tabsize=8) 将字符串中的制表符转换为四个空格,默认tab键转换为8个空格,但tabsize参数可以设置。
>>> s1 = '\t'
>>> s2 = s1.expandtabs()
>>> s2
'        '
>>> s2 = s1.expandtabs(tabsize=4)
>>> s2
'    '

字符串的修剪

  • str.strip([chars]) 把字符串中两边的指定字符去掉
>>> s1 = '    spacious    '
>>> s1.strip()
'spacious'
>>> s2 = 'www.halloworld.com'
>>> s2.strip('wcom.')
'halloworld'
  • str.lstrip([chars]) 把字符串中的左边的指定字符去掉
>>> s1 = '    spacious    '
>>> s1.lstrip()
'spacious    '
>>> s2 = 'www.halloworld.com'
>>> s2.lstrip('wcom.')
'halloworld.com'
  • str.rstrip() 把字符串中右边的指定字符去掉
>>> s1 = '    spacious    '
>>> s1.rstrip()
'    spacious'
>>> s2 = 'www.halloworld.com'
>>> s2.rstrip('wcom.')
'www.halloworld'

字符串的测试与查找

  • str.startswith(prefix[, start[, end]]) 如果字符串以prefix开头,则返回True,否则返回False,也可以是要查找的prefix元组。start参数为可选参数,测试字符串从该位置开始。end参数为可选的参数,停止在该位置比较字符串。
>>> s1 = 'abcdefghi'
>>> s1.startswith('as')
False
>>> s1.startswith('ab')
True
>>> s1.startswith('cd')
False
>>> s1.startswith('cd',2)
True
>>> s1.startswith(('cd','ab'))
True
  • str.endswith(suffix[, start[, end]]) 如果字符串以指定的后缀结尾,则返回True,否则返回False。start,end是可选参数,测试从start位置开始,停止在end位置进行比较。要搜索的后缀可能是任何类似于字节的对象。
>>> s1 = 'abcdefghi'
>>> s1.endswith('hi')
True
>>> s1.endswith('h')
False
>>> s1.endswith(('ds','hi', 'hh'))
True
>>> s1.endswith('h', 0, -1)
True
  • str.count(sub[, start[, end]]) 返回范围[start, end]中子字符串的非重叠出现次数。可选参数的start与end被解释为切片表示法。
>>> x = 'sffefwsf'
>>> x.count('sf',0,8)
2
  • str.find(sub[, start[, end]]) 返回找到序列中子序列的最小索引值(第一次被找到的位置),start与end是可选参数,指定开始搜索的初始位置与终止位置。找不到则返回-1。
>>> x = 'sffefwsf'
>>> x.find('fe')
2
>>> x.find('fe', 3)
-1
  • str.rfind(sub[, start[, end]]) 返回在字符串中找到子序列的最大的索引(最后一次出现的位置),start与end是可选参数,指定开始搜索对的初始位置与终止位置。找不到则返回-1。
>>> x = 'sffefwsf'
>>> x.rfind('f')
7
  • str.index(sub[, start[, end]]) 类似于find()函数,但是这个函数在subsequence没有找到时会返回ValueError错误。
>>> x = 'sffefwsf'
>>> x.index('f')
1
>>> x.index('a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found
  • str.rindex(sub[, start[, end]]) 类似于rfind()函数,但是当subsequent没有找到时会返回ValueError错误。
>>> x = 'sffefwsf'
>>> x.rindex('f')
7
>>> x.rindex('a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

字符串的替换

  • S.replace(old, new[, count]) 返回序列的副本,并将所有出现的旧的子序列替换为新的序列。给出可选的参数计数,则只替换第一个计数匹配项。
>>> x = 'sffefwsf'
>>> x.replace('s','S')
'SffefwSf'
  • static str.maketrans(from, to) 此静态方法返回一个转换表可用于bytes.translate()将每个字符映射在from到to的字符串进行一一对应,两个字符串长度必须一致,否则返回ValueError错误。
x = 'aaa'
>>> x.maketrans('aaa', 'bbb')
{97: 98}
>>> x.maketrans('a', 'b')
{97: 98}
  • str.translate(table) 返回字符串的副本,其中每个字符都已通过给定的转换表映射。显示由maketrans()形成的映射。
x = 'aaa'
>>> x.translate(x.maketrans('a', 'b'))
'bbb'
>>> x.translate(x.maketrans('c', 'b'))
'aaa'
>>> x = 'aabbccddeeff'
>>> x.translate(x.maketrans('c', 'b'))
'aabbbbddeeff'
>>> x.translate(x.maketrans('c', 'dd'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: the first two maketrans arguments must have equal length

字符串的拆分与组合

  • S.split(sep=None, maxsplit=-1) 使用sep作为分隔符字符串,maxsplit为非负数字时代表最大拆分次数。
>>> b'1,2,3'.split(b',')
[b'1', b'2', b'3']
>>> b'1,2,3'.split(b',', maxsplit=1)
[b'1', b'2,3']
>>> b'1,2,,3,'.split(b',')
[b'1', b'2', b'', b'3', b'']
  • str.rsplit(sep=None, maxsplit=-1) 使用sep作为分隔符分隔字符串,返回字符串中单词的列表。如果给出了最大拆分,最多只能进行最大拆分,并且从右边开始。
>>> x = 'sffefwsf'
>>> x.rsplit('s')
['', 'ffefw', 'f']
>>> x.rsplit('s', maxsplit=1)
['sffefw', 'f']
  • S.splitlines([keepends]) 返回字符串中的行的列表,在行边界处断开。除非给出了keepends且为true,否则换行符不包括在生成的列表中。

此方法在以下边界上分隔。边界时普遍换行的超集。

Representation Description 中文
\n Line Feed 换行
\r Carriage Return 回车
\r\n Carriage Return + Line Feed 回车+换行
\vor\x0b Line Tabulation 行列表
\for\x0c Form Feed 换页
\xlc File Separator 文件分隔符
\xld Group Separator 组分隔符
\xle Record Separator 记录分隔符
\x85 Next Line(C1 Control Code) 下一行(C1控制代码)
\u2028 Line Separator 行分隔符
\u2029 Paragraph Separator 段落分隔符
>>> 'ab c\n\nde fg\rkl\r\n'.splitlines()
['ab c', '', 'de fg', 'kl']
>>> 'ab c\n\nde fg\rkl\r\n'.splitlines(keepends=True)
['ab c\n', '\n', 'de fg\r', 'kl\r\n']
  • str.partition(sep) 在第一次出现sep时拆分字符串,并返回包含分隔符之前的部分的元组,分隔符本身以及分隔符之后的部分。如果找不到分隔符,则返回字符串本身以及两个空字符串的元组。
>>> x = 'abccbacbd'
>>> x.partition('cb')
('abc', 'cb', 'acbd')
>>> x.partition('z')
('abccbacbd', '', '')
  • S.rpartition(sep) 在最后一次出现sep时拆分字符串,并返回包含分隔符之前的部分的元组,分隔符本身以及分隔符之后的部分。如果找不到分隔符,则返回包含两个空字符串以及字符串本身的元组。
>>> x = 'abccbacbd'
>>> x.rpartition('cb')
('abccba', 'cb', 'd')
>>> x.rpartition('z')
('', '', 'abccbacbd')
  • S.join(iterable) 返回一个字符串,把字符串以指定字符串进行相连。
>>> x = 'aaa'
>>> '-'.join(x)
'a-a-a'
  • str.format(*args, **kwargs) 执行字符串格式化操作。调用此方法的字符串包含由大括号分隔的文字文本或替换字符。每个替换字段都包含位置参数的数字索引或关键字参数的名称。返回字符串的副本,其中每个替换字段都替换为相应参数的字符串值。
>>> "The sum of 1 + 2 is {0}".format(1+2)
'The sum of 1 + 2 is 3'
  • str.format_map(mapping) 类似于str.format(**mapping)
>>> class Default(dict):
...     def __missing__(self, key):
...         return key
...
>>> '{name} was born in {country}'.format_map(Default(name='Guido'))
'Guido was born in country'

参考文献:
https://docs.python.org/3/library/stdtypes.html
https://www.cnblogs.com/single-boy/p/7309461.html

转载请注明:南梦婷的博客 » 点击阅读原文


Similar Posts

Comments