首先申明下,本文为笔者学习《Python学习手册》的笔记,并加入笔者自己的理解和归纳总结。
1. 单引号和双引号
在Python里面单引号和双引号的作用是一样的。
如果字符串内包含单引号和双引号,可以在使用另一种引号或者转义字符。
>>> "hello 'world'" # 双引号内包含单引号
"hello 'world'"
>>> 'hello "world"' # 单引号内包含双引号
'hello "world"'
>>> 'hello \'world\'' # 对单引号进行转义
"hello 'world'"
>>> "hello \"world\"" # 对双引号进行转义
'hello "world"'
>>> val = "Hello " "World! " "Welcome to Python."
>>> val # 多个字符串合并成
'Hello World! Welcome to Python.'
2. 三引号表示多行
>>> val = """hello world
welcome to python
glad to see you"""
>>> val # 在字符串内使用'\n'
'hello world\nwelcome to python\nglad to see you'
>>> print val
hello world
welcome to python
glad to see you
3. 转义字符串
转义 | 描述 |
\(在行尾时) | 续行符 |
\\ | 反斜杠 |
\’ | 单引号 |
\" | 双引号 |
\a | 响铃 |
\b | 退格 |
\f | 换页 |
\n | 新行 |
\r | 返回 |
\t | 水平制表符 |
\v | 垂直制表符 |
\xhh | 十六进制字符 |
\ooo | 八进制字符 |
\0 | 空格 |
4. raw字符串
raw
字符串在字符串前面加上"r"
字符,关闭转义机制。
>>> path = "e:\text\text.txt"
>>> path # 未对字符串进行任何处理
'e:\text\text.txt'
>>> path = r"e:\text\text.txt"
>>> path # raw字符串使用转义字符对"\"处理
'e:\\text\\text.txt'
5. 字符串访问
使用索引访问字符串,从左往右依次从0开始递增,从右往左依次从-1开始递减。
>>> val = "HelloWorld!"
>>> val[1], val[5] # 索引操作
('e', 'W')
>>> val[-1] # 索引为负数时为(len + index)
'!'
分片,通过[:]
的左右两边定义开始和结束位置,默认是0和len。
>>> val = "HelloWorld!"
>>> val[1:3] # 从1开始,到3结束,不包含3
'el'
>>> val[:5] # 从0开始,到5结束
'Hello'
>>> val[5:] # 从5开始,到len结束
'World!'
>>> val[:]
'HelloWorld!'
>>> val[-6:-1] # 为负数时,索引同样要从左往右
'World'
设置分片的步进,正数表示从左往右,负数表示从右往左。
>>> val = "123456789"
>>> val[::2] # 步进为2
'13579'
>>> val[-1:-5:-1] # 步进为负数时,从右往左进行
'9876'
6. 字符转换
>>> ord('a') # 单个字符转换成对应的ASCII码
97
>>> chr(97) # ASCII码转换成对应的单个字符
'a'
>>> str(97) # 其他类型的变量转换成字符串
'97'
7. 字符串方法
7.1 基本操作
>>> "abc" + "def" # 加号把两个字符串合成新字符串
'abcdef'
>>> "hello" * 4 # 乘号复制字符串
'hellohellohellohello'
>>> len('hello') # len计算字符串的长度
5
>>> for c in "helloworld": # for遍历字符串
print c,
h e l l o w o r l d
>>> "hello" in "helloworld" # in查询字符串是否包含其他字符串
True
>>> "h" in "helloworld"
True
字符串与数字不能相加。
>>> "abc" + 12
Traceback (most recent call last):
File "<pyshell#74>", line 1, in <module>
"abc" + 12
TypeError: cannot concatenate 'str' and 'int' objects
7.2 replace方法
replace()
方法用来替代字符串,第三个参数表示替代的个数,默认是全部。
>>> val = "helloworld"
>>> val.replace("l", "xx") # 替代所有l字符
'hexxxxoworxxd'
>>> val.replace("l", "xx", 2) # 替代两处l字符
'hexxxxoworld'
>>> val.replace("ll", "xx")
'hexxoworld'
7.3 find方法
find()
方法返回在字符串中的位置,没有返回-1。第二个参数表示开始位置,默认为0。
>>> val = "helloworld"
>>> val.find("llo") # 查询字符串的位置
2
>>> val.find("o", 5) # 设置开始位置
6
>>> val.find("Hello") # 字符串不存在,返回-1
-1
7.4 join和split方法
>>> ":".join(["1", "2", "3", "4"]) # 将字符列表连接,并以自身为分隔符
'1:2:3:4'
>>> "1:2:3:4".split(":") # 以":"分割字符串
['1', '2', '3', '4']
>>> "1 2 3 4".split() # 默认分隔符是空格
['1', '2', '3', '4']
7.5 其他方法
>>> val = "HelloWorld!"
>>> val.upper() # upper(),字符串转换成大写
'HELLOWORLD!'
>>> val.lower() # lower(),字符串转换成小写
'helloworld!'
>>> val.startswith("Hello") # startswith(),查询是否以某字符串开始
True
>>> val.endswith("!") # endswith(),查询是否以某字符串结尾
True
8. 字符串格式化
8.1字符串格式化表达式(%)
格式符%[(name)][flags][width][.precision]typecode
(name)
可选,用于选择指定的key
。
>>> "%(name)s is %(age)d" % {"name":"Mike", "age":18}
'Mike is 18'
flags
可选,可以选择的值有:(+)
右对齐,正数前加号,负数前减号。(-)
左对齐,正数前无符号,负数前减号。(空格)
右对齐,正数前空格,负数前减号。(0)
右对齐,正数前无符号,负数前减号,用0填充空白处。
>>> "%10d, %10d" % (1234, -1234) # 默认右对齐
' 1234, -1234'
>>> "%+10d, %+10d" % (1234, -1234) # +,右对齐,显示符号
' +1234, -1234'
>>> "%-10d, %-10d" % (1234, -1234) # -,左对齐,不显示加好
'1234 , -1234 '
>>> "%010d, %010d" % (1234, -1234) # 0,右对齐,0是占位符
'0000001234, -000001234'
width
可选,占有宽度。
.precision
可选,小数点后保留的位数。
>>> "%010.4f" % (5.0/3) # 10位,显示4位小数
'00001.6667'
>>> "%.6f" % (5.0/3) # 显示6位小数
'1.666667'
>>> "%010.f" % (5.0/3) # 不显示小数
'0000000002'
typecode
必选。
代码 | 意义 |
s | 字符串 |
r | 字符串,使用repr |
c | 字符 |
d | 十进制整数 |
i | 整数 |
u | 无号整数 |
o | 八进制整数 |
x | 十六进制整数 |
e | 浮点指数 |
E | 浮点指数 |
f | 浮点数 |
F | 浮点数 |
g | 浮点指数或浮点数 |
G | 浮点指数或浮点数 |
% | 常量% |
整型
>>> x = 255
>>> "%d, %i, %u" % (x, x, x) # 整型
'255, 255, 255'
>>> "%o, %x" % (x, x) # 八进制和十六进制
'377, ff'
浮点型
>>> x = 123.4567
>>> "%f, %F" % (x, x)
'123.456700, 123.456700'
>>> "%e, %E" % (x, x)
'1.234567e+02, 1.234567E+02'
>>> "%g, %G" % (x, x)
'123.457, 123.457'
8.2 字符串格式化方法调用
使用字符串的format()
方法。在主字符串,通过花括号,使用序列或者关键字指出替代目标。
>>> "{0} {1}".format("Hello ", "World!") # 通过序列替代目标
'Hello World!'
>>> "{name} is {age}".format(name="Mike", age="18") # 通过关键字替代目标
'Mike is 18'
>>> "{name} is {0}".format(18, name="Mike") # 混合使用,序列替代在前
'Mike is 18 and live in ShangHai'
>>> "{1[name]} is {0}".format(18, {"name":"Mike"}) # 对替代结果操作
'Mike is 18'
在序列或者关键字后添加:
,指定具体的格式,格式是[[fill]align][sign][#][0][width][.precision][typecode]
。
fill
可选,空白处填充的字符。
align
可选,对齐方式:(<)
内容左对齐。(>)
内容右对齐。(=)
内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。(^)
内容居中。
>>> "{0:-<20}".format("Hello World!") # 左对齐,-填充
'Hello World!--------'
>>> "{0:->20}".format("Hello World!") # 右对齐,-填充
'--------Hello World!'
>>> "{0:-^20}".format("Hello World!") # 居中对齐,-填充
'----Hello World!----'
>>> "{0:0>20}".format(-1234) # 右对齐,0填充,符号在填充右侧
'000000000000000-1234'
>>> "{0:0=20}".format(-1234) # 右对齐,0填充,符号在填充左侧
'-0000000000000001234'
width
可选,格式化所占宽度。
sign
可选,有无符号数字(+)
正数前加号,负数前减号。(-)
正数前无符号,负数前减号。(空格)
正数前空格,负数前减号。
>>> "{0:+}, {1:+}".format(1234, -1234) # 加号显示符号
'+1234, -1234'
>>> "{0:-}, {1:-}".format(1234, -1234) # 减号不显示符号
'1234, -1234'
>>> "{0: }, {1: }".format(1234, -1234) # 空格在正数前实现空格
' 1234, -1234'
#
可选,对于二进制、八进制、十六进制,如果加上#
,会显示 0b/0o/0x
>>> "{0:b}, {1:o}, {2:x}".format(255, 255, 255) # 默认不显示
'11111111, 377, ff'
>>> "{0:#b}, {1:#o}, {2:#x}".format(255, 255, 255) # 显示 0b/0o/0x
'0b11111111, 0o377, 0xff'