Python核心数据类型——字符串

字符串

Python的字符串是一个有序的字符集合,有序指的是可以通过偏移来访问每个字符,每个字符有严格的从左到右的位置顺序,类似于数组。Python中没有单个字符的类型(C语言中的char),取而代之的是使用一个字符的字符串。字符串是不可变序列,不可以在原处修改,也就是无法执行类似str[0] = 'x'的操作,而执行合并(str1 + str2)、修改字符串(str.replace(..))及分片(s[1:3])等字符串操作都是生成新的对象。

1. 字符串的编写方式

单引号括起来

>>> 'spa"m'    #不可写成'spa'm',这变成'spa' + m',第2个不完整。
'spa"m'
>>> 'spa''m'   #'spa' + 'm'
'spam'

双引号括起来(不是两个单引号)

>>> "spa'm"
"spa'm"

三引号括起来(三个单引号或三个双引号)

>>> '''spam'''
'spam'
>>> """spam"""
'spam'

只要不引起歧义,可以在字符串中直接嵌入单引号(')或双引号(")而不用通过转义字符(\',\")。

 

还可以利用三引号(三个单引号或三个双引号)来注释代码块

x = 1
'''
import os
print os.getcwd()
'''
y = 2

2. 转义字符

转义字符 说明
\ 忽视(连续),如果语句太长一行写不下,用\可以接到下一行。
\\ 反斜线(保留\)
\' 单引号(保留')
\” 双引号(保留”)
\a 响铃
\b 倒退
\f 换页
\n 换行
\r 回到行首
\t 水平制表符
\v 垂直制表符
\xhh 十六进制值,如\x00,\x08,\xff,h对应十六进制数。
\0oo 十六进制值,如\000,\077,o对应八进制数。
\0 NULL(不是字符串结尾),等价于\x00,Python中不是用\0来判断字符串结尾,
每个字符串都存有字符串的长度,通过计数来判断是否到达结尾。

 

raw字符串:如果字母r(大写或小写)出现在字符串的第一个引号前面,它将会关闭转义机制

>>> myFile = open(r'c:\new\text.dat', 'w') 
>>> myFile = open('c:\new\text.dat', 'w')   #出错,因为\n和\t是转义字符,解析错误。

unicode字符串:在第一个引号前增加字母u(大写或小写),unicode字符串每个字符使用2个字节编码,可以支持更丰富的字符集。

>>> u'spam'
u'spam'
>>> 'eggs' + u'spam'  #混合数据类型,自动转换成unicode
u'eggsspam'
>>> str(u'spam')      #转换成正常字符串
'spam'
>>> unicode('spam')   #转换成unicode字符串
u'spam'

允许混合row和unicode字符串,但是u必须在r前面(ur'.....')

>>> ur'c:\new\txt.dat'
u'c:\\new\\txt.dat'

3. 字符串格式化

字符串格式化语法包含格式化代码的要格式化的字符串 % 要格式化的对象(多个的话,放在括号内)

格式化代码 说明
%s 字符串(或任何对象),不是字符串会自动转成字符串
%r

字符串,但使用repr,而不是str,repr显示的是解释器可读的,str显示的是人可读的。也就是说repr是面向解释器的,str是面向人的。在大部分情况下两者显示的值是相同的,但在一些特定的对象是不同的,如字符串。Str('a') == 'a',repr('a') == "'a'"  ('a'由双引号“括起来)

%c 字符
%d 有符号整数(十进制)
%i 整数
%u 无符号整数(十进制)
%o 八进制整数
%x 十六进制整数
%X 十六进制整数,但打印时大写
%e 浮点数,科学计数法表示
%E 浮点数,科学计数法表示,使用大E
%f 浮点数
%g 浮点数(根据值大小采用%e或%f)
%G 浮点数(根据值大小采用%E或%f)
%% 百分号标记

 

 

>>> '%d %s %d you' % (1, 'spam', 4)
'1 spam 4 you'
>>> '%s %s %s' % (42, 3.14, [1, 2, 3])
'42 3.14 [1, 2, 3]'

 

更高级的格式化,左侧的格式化代码%[(name)][flags][width][.precision]code

  • []:方括号内的表示可选
  • 当要格式化的对象为字典时可以使用(name),name替换成键,但键必须是字符串才行。
  • flags:有三种标志,左对齐(-)、正负号(+)、补零(0)
  • width:宽度,不够补零或空格,宽度包括小数点和正负号
  • .precision:精度,小数的位数
  • code:对应格式化代码,如d,s

 

>>> x = 123
>>> '%d.%5d.%-5d.%05d' % (x, x, x, x)
'123.  123.123  .00123'

>>> x = 1.23
>>> '%-5.2f.%05.2f.%+06.1f' % (x, x, x)
'1.23 .01.23.+001.2'

>>> '%(n)d %(3)s' % {'n': 1, '3': 'spam'}
'1 spam'

4. 一些字符串相关方法介绍

单个字符转换

>>> ord('a')  #将字符转换成对应的ASCII码
97
>>> chr(97)   #将ASCII码转换成对应的字符
'a'

replace方法:s.replace(源字符串, 目的字符串, n),第三个参数为可选,表示将第n个出现源字符串替换成目的字符串,默认为所有。

>>> s = 'aba'
>>> s.replace('a', 'c')      #将所有的'a'替换成c
'cbc'
>>> s.replace('a', 'c', 1)  #将第一个'a'替换成c
'cba'

join方法:分隔字符串.join(字符串列表),将字符串列表串在一起,成为一个新的字符串,用分隔字符串隔开。

>>> '123'.join(['eggs', 'ham'])
'eggs123ham'
>>> 'x'.join(['a', 'b', 'c'])
'axbxc'

split方法:s.split(分隔字符串),分隔字符串为可选参数,默认为空格,返回一个字符串列表。

>>> s = 'a b c'
>>> s.split()
['a', 'b', 'c']
>>> s = 'a,b,c'
>>> s.split(',')
['a', 'b', 'c']
>>> s = 'axxbxxc'
>>> s.split('xx')
['a', 'b', 'c']

 

posted @ 2011-11-22 23:58  NaN-Hax  阅读(4965)  评论(0编辑  收藏  举报