字符串

字符串
 
>>> s = "abc"
>>> type(s)
<class 'str'>        # str是Unicode
>>> s = "abc".encode("utf-8")
>>> type(s)
<class 'bytes'>        # bytes 用于网络传输,服务器之间的传输
 
>>> s = "abc".encode()        # 可以不加“utf-8”,默认就是utf-8
>>> type(s)
<class 'bytes'>
>>> import sys        
>>> sys.getdefaultencoding()
'utf-8'
 
>>> "中国".encode("gbk")
b'\xd6\xd0\xb9\xfa'
>>> s = b'\xd6\xd0\xb9\xfa'
>>> print(s.decode("gbk"))
中国

 

 
 
  • 转义字符
 
转义字符
描述
\
\(在行尾时) 续行符,也就是多行语句符
\\
反斜杠符号
\'
单引号
\"
双引号
\a
响铃
\b
退格(Backspace)
\e
转义
\000
 空
\n
换行
\v
纵向制表符
\t
横向制表符
\r
回车
\f
换页
\oyy
八进制数yy代表的字符,例如:\o12代表换行
\xyy
十进制数yy代表的字符,例如:\x0a代表换行
\other
其它的字符以普通格式输出
 
  • 字符串运算
操作符
描述
实例
+
字符串连接
a + b输出结果:HelloPython
*
重复输出字符串
a*2输出结果:HelloHello
[]
通过索引获取字符串中字符
a[1]输出结果e
[ : ]
截取字符串中的一部分
a[1:4]输出结果ell
in
成员运算符-如果字符串中包含给定的字符返回True
‘H’ in a输出结果True
not in
成员运算符- 如果字符串中不包含给定的字符返回True
‘M’ not in a输出结果True
r/R
原始字符串- 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法。
print r'\n' 和print R'\n'
%
格式字符串
 
  • 格式化字符串
 
符号
描述
%c
格式化字符及其ASCII码
%s
格式化字符串
%d
格式化整数
%u
格式化无符号整型,和%d一致
%o
格式化无符号八进制数
%x
格式化无符号十六进制数
%X
格式化无符号十六进制数(大写)
%f 
格式化浮点数,可指定小数点后的位数,默认保留小数点后6位
%e
用科学计数法格式化浮点数
%E
作用同%e,用科学计数法格式化浮点数
%g
%f和%e的简写
%G
%f和 %E的简写
%p
用十六进制数格式化变量的地址
 
  • 查看变量指向的地址,用id(),查看字符串是否改变
>>> s = "abc"
>>> id(s)
31079592
>>> s1 = "abc"
>>> id(s1)
31079592
>>> id("abc")
31079592
>>> s is s1
True
  • 拼字符串的方法
>>> "a"+"b"+"c"        # 消耗内存
'abc'
>>> "".join(["1","2"])
'12'
>>> "abc{}".format("x")
'abcx'
>>> "abc{1}{0}".format("x","y")
'abcyx'
>>> "%s = %s "%(1,2)
'1 = 2 '
>>> "%d = %d "%(1,2)
'1 = 2 '
>>> "%.2f = %.2f"%(1,2)
'1.00 = 2.00'
  • 输出所有关键字 keyword
>>> import keyword
>>> dir(keyword)
['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'iskeyword', 'kwlist', 'main']
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if','import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
  • 内置方法
>>> s = 'abc'
>>> s.startswith("a")        # 判断开始位置
True
>>> s.endswith("a")        # 判断结束位置
False
>>> s.endswith("c")
True
 
>>> '    \t\n abc    '.strip()        # 去空白
'abc'
>>> '    \t\n abc    '.lstrip()        # 去除左侧所有空白
'abc    '
>>> '    \t\n abc    '.rstrip()        # 去除右侧所有空白
'    \t\n abc'
>>> "****##abc****##".strip("*")
'##abc****##'
>>> "****##abc****##".strip("#")
'****##abc****'
>>> "****##abc****".strip("#")
'****##abc****'
>>> "****##abc****".strip("*")
'##abc'
>>> "****##abc****".strip("#*")
'abc'
 
>>> "a".upper()        # 转换成大写
'A'
>>> "aBFR".lower()        # 转换成小写
'abfr'
>>> "aBFaa".swapcase()        # 大转小, 小转大
'AbfAA'
>>> "abc bcdd".capitalize()        # 首字母大写
'Abc bcdd'
>>> "abc bRTYd".capitalize()        # 只有首字母大写
'Abc brtyd'
>>> import string
>>> string.capwords("afsg   oiuOOPP")        # 每个单词首字母大写
'Afsg Oiuoopp'
>>> "abc bRTYd".title()        # 每个单词首字母大写
'Abc Brtyd'
 
>>> "abv".ljust(10)        # 左对齐
'abv       '
>>>
>>> "abv".rjust(10)        # 右对齐
'       abv'
>>> "abv".center(10)        # 居中
'   abv    '
>>> "abc".rjust(10,"*")
'*******abc'
>>> "abc".rjust(5,"*")
'**abc'
>>> "abv".ljust(10,"*")
'abv*******'
>>> "abv".rjust(10,"*")
'*******abv'
>>> "abv".center(10,"*")
'***abv****'
 
>>> "abacaaaaddddaauu".find("a")
0
>>> "abacaaaaddddaauu".find("ab")
0
>>> "abacaaaaddddaauu".find("dd")
8
>>> "abacaaaaddddaauu".rfind("dd")
10
>>> "abacaaaaddddaauu".find("ii")     # 返回指定子串的最高索引,如果没找到则返回-1,可以指定要开始替换的起始,结束位置。
-1
>>> "a111111z".find("a",1)        # 可以按位置查找
-1
>>> "a111111z".find("a",5,10)
-1
>>> "a111111z".find("z",5,10)
7
 
>>> "abacaaaaddddaauu".index("a")
0
>>> "abacaaaaddddaauu".index("da")        # 返回索引位置,找不到会报错
11
>>> "abacaaaaddddaauu".index("ii")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found
 
>>> "abacaaaaddddaauu".count("da")        # 统计个数
1
>>> "abacaaaaddddaauu".count("a")
8
 
>>> "abc".zfill(10)        # 这里的z指zero,用0将字符填充到指定长度
'0000000abc'
 
>>> "abca".replace("bc","xxxx")        # 用指定字符串替换指定字符串,如果不指定替换次数,则替换所有
'axxxxa'
>>> "abca".replace("a","xxxx")
'xxxxbcxxxx'
>>> "abca".replace("a","xxxx",1)
'xxxxbca'
>>> "ab c a 3 $$".replace(" ","")
'abca3$$'
 
>>> "a  b       e       r".expandtabs(1)        # 把字符串的tab字符(\t)转化为空格,如不指定tabsize,默认为8个空格
'a b   e r'
>>> "a  b       e       r".expandtabs(1)
'a b e r'
>>> "ab e       r".expandtabs(1)
'ab e r'
>>> "ab e       r".expandtabs(0)
'aber'
>>> "ab er".expandtabs(0)
'aber'
 
>>> "a b c d".split()        # 按指定字符串对目标字符串进行切割,可以指定切割次数
['a', 'b', 'c', 'd']
>>> "a\nb\tc\rd e".split()
['a', 'b', 'c', 'd', 'e']
>>> "a*b*c*d".split()
['a*b*c*d']
>>> "a*b*c*d".split("*")
['a', 'b', 'c', 'd']
>>> "a*b*c*d".split("*",1)
['a', 'b*c*d']
>>> "a*b*c*d".rsplit("*",1)        # 从右边开始切割
['a*b*c', 'd']
 
>>> s='1\n2\n'            # 按换行符切割显示,如没指定keepends=True则将换行符移除
>>> print (s.splitlines())
['1', '2']
>>> print (s.splitlines(1))
['1\n', '2\n']
>>> print (s.splitlines(True))
['1\n', '2\n']
>>> print (s.splitlines(False))
['1', '2']
 
>>> "*".join(["1","2","3"])        # 返回一个用指定字符串分隔的字,或者是将指定字符加入到另一个字符中
'1*2*3'
>>> "*".join(("1","2","3"))
'1*2*3'
 
>>> "abc".isalpha()        # 字符串至少有一个字符,并且所有字符都是字母则返回True,否则False
True
>>> "abc11".isalpha()        
False
>>> "abc11".isalnum()        # 字符串至少有一个字符,并且所有字符都是字母或数字则返回True,否则False
True
>>> "abc11".isdigit()        # 字符串只包含数字则返回True,否则返回False
False
>>> "34541".isdigit()
True
>>> "345.41".isdigit()
False
>>> " ".isspace()        # 判断字符串中至少有一个字符且所有都是空格,否则返回false
True
>>> " ".isspace()
True
>>> "".isspace()
False
>>> "a".islower()        # 字符中至少包含一个能区分大小写的字符,并且这些字符都是小写则返回True,否则返回Flase
True
>>> "a".isupper()        # 字符中至少包含一个能区分大小写的字符,并且这些字符都是大写则返回True,否则返回Flase
False
>>> "I Am Cboy".istitle()        # 检测字符串中所有的单词拼写首字母是否为大写字母,其他为小写字母,并且至少有一个字母,则返回True,否则返回False
True
>>> "I am Cboy".istitle()
False
>>> "123".isnumeric()        # 如果字符串只包含数字字符,则返回True,否则返回False
True
>>> "12a3".isnumeric()
False
>>> "12a3".isdecimal()        # 字符串只包含十进制数字则返回True,否则返回False
False
>>> "123".isdecimal()
True
 
>>> map = str.maketrans('123', 'abc')        # String.maketrans(from, to)
>>> s = '54321123789'        # 返回一个256个字符组成的翻译表,其中from中的字符被一一对应地转换成to,所以from和to必须是等长的
>>> print (s.translate(map))
54cbaabc789
>>> t=bytes.maketrans(b'abc',b'ABC')
>>> print(b'abc123'.translate(t,b"123")) # S.translate(table[,deletechars]) 
b'ABC'    # 使用上面的函数产后的翻译表,把S进行翻译,并把deletechars中有的字符删掉。需要注意的是,如果S为unicode字符串,那么就不支持deletechars参数,所以需要使用字节字符串
 
>>> import string
>>> string.ascii_letters        # 所有大小写字母
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.ascii_lowercase        # 小写字母
'abcdefghijklmnopqrstuvwxyz'
>>> string.ascii_uppercase        # 大写字母
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.digits        # 数字
'0123456789'
>>> string.punctuation        # 标点符号 特殊字符
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

 

 
posted @ 2018-09-27 17:14  _冒号  阅读(473)  评论(0)    收藏  举报