- 字符串
- 字符串属于不可变序列,一般使用单引号、双引号或三引号进行界定,并且单引号,双引号、三单引号、三双引号还可以相互嵌套,用来表示复杂的字符串。
- 字符串类型是一类特殊的数据集对象,称为序列。序列类型中的对象按一定顺序排列,即对象序列。
- 构建字符串:
- 字符串构造函
- 使用函数str()
x = str(123)
print(x,type(x))
y = str(u'dd456dd')
print(y,type(y))
#结果
# 123 <class 'str'>
# dd456dd <class 'str'>
- 使用引号:
- 单引号:'abc'、'a'、'123'。
- 双引号:"a"、"123"、"acs"。
- 单双引号可以交错使用
- 三单或者三双:"'Python"'、"""Python"""。
- 三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。
- 带 r或者R前缀的Raw字符串:r"abc\n123"。
- Python不会解析其中的转义字符。典型应用在表示文件路径。
# fl = open('d:\temp\newlist.py', 'r')
#上面代码会执行错误
fl = open('d:\\temp\\newlist.py', 'r') #使用反斜杠表示转义字符
fl = open(r'd:\\temp\\newlist.py', 'r') #使用Raw字符串表示文件名字字符串
fl = open('d:/temp/newlist.py', 'r') # 使用正斜杠表示
- 带 u或者U前缀的Unicode字符串:u"asdf"、U"asdss"。 以u或U开头的字符串表示unicode字符串
- Unicode是书写国际文本的标准方法。如果你想要用非英语写文本,那么你需要有一个支持Unicode的编辑器。
- 类似地,Python允许你处理Unicode文本——你只需要在字符串前加上前缀u或U。
print(u'我')
print(u'458\t\tdd') #不能忽视转义字符
#结果:
#我
#458 dd
- 转义字符
转义字符 | 描述 |
\(在行尾时) | 续行符 |
\\ | 反斜杠符号 |
\' | 单引号 |
\" | 双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\e | 转义 |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\oyy | 八进制数yy代表的字符,例如:\o12代表换行 |
\xyy | 十进制数yy代表的字符,例如:\x0a代表换行 |
\other | 其它的字符以普通格式输出 |
- 访问字符串中的值
s = "abc"
#直接访问
print(s)
#注意有反斜杠的字符串,使用Raw字符串
s = "Let's go"
print(s)
s1 = "Let\'s go"
print(s1)
- 字符串运算符
a = '123'
b = 'wwwas'
print(a+b)
print(a*2)
print(b*2)
# 123wwwas
# 123123
# wwwaswwwas
- 字符串比较
- 两个单字符之间的比较都会转化为对应得ASCII值之间的关系。
- 使用ord()函数和chr()可以查看相应的ASCII码。
#查看ASCII码
print(ord('a'))
print(chr(97))
#两个字符的比较
print(('a'<'b'))
#结果:
#97
#a
#True
- 多字符之间:从索引为0的位置开始比较,若相等则索引值加一再比较,等待字符串结束。
v1 = "ab" < "abc"
v2 = "ab" < "ac"
v3 = "ab " < "ab"
print(v1,v2,v3)
#结果:
#True True False
-字符串格式化:
- % 格式符方式
- 格式: %[(name)][flags][width].[precision]typecode
- (name): 可选,用于选择指定的ke
- flags: 可选,可供选择的值有:
- +: 指定右对齐输出 右对齐:正数前加正号,负数前加负号
- -: 指定左对齐输出 左对齐:正数前无符号,负数前加负号;
- 空格 ,
- 右对齐;正数前加空格,负数前加负号
- 右对齐;正数前无符号,负数前加负号;用0填充空白处
- width: 可选,占有宽度
- . precision: 可选,小数点后保留的位数
- typecode: 必选
- s,获取传入对象的__str__方法的返回值,并将其格式化到指定位置,字符串(采用str()显示)
- r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置,字符串(采用repr()显示)
- c,单个字符
- 整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);
- 字符:将字符添加到指定位置
- b, 二进制整数
- o,八进制整数
- 将整数转换成八进制表示,并将其格式化到指定位置
- x,十六进制整数
- 将整数转换成十六进制表示,并将其格式化到指定位置
- d,十进制整数
- 将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置
- e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
- E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
- f, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
- F,同上
- g,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置 (如果是科学计数则是e;)
- G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置 (如果是科学计数则是E;)
- %,当字符串中存在格式化标志时,需要用 %%表示一个百分号
#字符串格式化
#%d 此处应该放入一个整数 %s 此处应该放入一个字符串
s = "I love %s"
print(s)
print("I love %s" % "china")
print(s%"china")
s = "I am %d years old"
print(s)
print(s%18)
s = "I am %s,I am %d yera old"
print(s)
print(s%("shuai ge",18)) #如果出现多个占位符,则相应的内容需要用括号括起来。有几个占位符就应该用几个实际的内容代替,或者不要
#Let's go
#Let's go
#I love %s
#I love chinaI love china
#I am %d years old
#I am 18 years old
#I am %s,I am %d yera old
#I am shuai ge,I am 18 yera old
- format函数格式化字符串
- 直接用format 函数进行格式化
- 使用:以大括号{}和冒号: 代替%。
- :[[fill]align][sign][#][0][width][,][.precision][type]
- 匹配操作:
- 通过位置匹配
#通过索引的方式进行匹配
s = "{0},{1}".format("first","second")
print(s)
s = "{1},{0}".format("first","second")
print(s)
#结果
#first,second
#second,first
- 通过名称匹配
#名称一一对应,也可以使用字典
s = "{0},{name}".format("first",name="jack")
print(s)
#结果
#first,jack
- 通过下标匹配
list1=[1,2,3]
s = "{0[0]},{0[1]}".format(list1)
print(s)
#结果
#1,2
- 其他
age = 18
name = "xiaoming"
s = "{name} {age} years old".format(**locals())
print(s)
#结果
#xiaoming 18 years old
- 格式规约:使用(:)引入的,其后可以跟随可选的字符对。
/*
- fill 【可选】空白处填充的字符
- align 【可选】对齐方式(需配合width使用)
- <,内容左对齐
- >,内容右对齐(默认)
- =,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
- ^,内容居中
*/
s = "left],{:<15},[right".format(789456)
print(s)
s = "left],{:>15},[right".format(789456)
print(s)
s = "left],{:^15},[right".format(789456)
print(s)
#填充
s = "left],{:.<15},[right".format("789456")
print(s)
s = "left],{:*>15},[right".format("789456")
print(s)
s = "left],{:/^15},[right".format("789456")
print(s)
#是否字符串都能够使用
#结果
#left],789456 ,[right
#left], 789456,[right
#left], 789456 ,[right
#left],789456.........,[right
#left],*********789456,[righ
#left],////789456/////,[right
s = "left],{0:0=15},[right".format(789456)
print(s)
s = "left],{:0=15},[right".format(-789456)
print(s)
s = "left],{0:015},[right".format(789456)
print(s)
s = "left],{0:015},[right".format(-789456)
print(s)
#结果
#left],000000000789456,[right
#left],-00000000789456,[right
#left],000000000789456,[right
#left],-00000000789456,[right
/*
- sign 【可选】有无符号数字
- +,正号加正,负号加负;
- -,正号不变,负号加负;
- 空格 ,正号空格,负号加负
- # 【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
- , 【可选】为数字添加分隔符,如:1,000,000
- width 【可选】格式化位所占宽度
- .precision 【可选】小数位保留精度
- type 【可选】格式化类型
- 特例 %,显示百分比(默认显示小数点后6位)
*/