python 中 u 和 r 加字符
kcrs7748
8年前
<h2>字符串</h2> <h3>简介</h3> <p>字符串序列用于表示和存储文本,python中字符串是不可变的,一旦声明,不能改变</p> <p>通常由单引号(' ),双引号(" ),三引号(''' """)包围</p> <p>其中三引号可以由多行组成,编写多行文本的快捷语法,常用语文档字符串,在文件的特定地点,被当做注释。便捷的多行注释</p> <p>Python实际三类字符串:</p> <pre> <code class="language-python">1.通常意义字符串(str) 2.原始字符串,以大写R 或 小写r开始,r'',不对特殊字符进行转义 3.Unicode字符串,u'' basestring子类 </code></pre> <p>在 Python 中,字符串是“不可改变的序列”</p> <pre> <code class="language-python">1.不可变 2.满足序列基本操作,按位置存取,切片及索引 </code></pre> <p>字符串</p> <p>1.获得帮助:</p> <pre> <code class="language-python">>>> help(str) >>> dir(str) >>> help(str.replace) </code></pre> <p>2.不可变性</p> <p>在创建之后就不能就地改变(同java),不能通过对其某一位置进行赋值而改变字符划分为不可变序列,这些字符串所包含的字符存在从左到右的顺序,不可在原处修改。python中字符串相当于一个不可变序列的列表,一旦声明,每个字符位置固定</p> <p>意味着若想改变,必须新建一个!</p> <pre> <code class="language-python">>>>s=’spam’ >>>s[0]=’k’ #TypeError #修改字符串类似java,重新赋值 s = ‘k’ + s[1:] </code></pre> <p>原始字符串</p> <p>原始字符串常量,r”abcd”,(r/R)即去掉了反斜线转义机制。关闭转义机制,即\不再表示转义</p> <p>用处:</p> <p>1.正则表达式</p> <p>用于处理正则表达式,减少反斜杠</p> <pre> <code class="language-python">p4search = re.compile(r'\s*') </code></pre> <p>2.系统路径</p> <p>可以方便地表示系统路径</p> <pre> <code class="language-python">path = r'e:\book' </code></pre> <p>unicode字符串</p> <p>Unicode是书写国际文本的标准方法。</p> <p>Python允许你处理Unicode文本——你只需要在字符串前加上前缀u或U。例如,u"This is a Unicode string."</p> <p>BP: 在你处理文本文件的时候使用Unicode字符串,特别是当你知道这个文件含有用非英语的语言写的文本。</p> <h3>常用操作</h3> <p>1.基本操作</p> <pre> <code class="language-python">+ :string1+string2 #联接字符串,将后一个串链接到前一个串的后面 Python不允许在+表达式中出现其他类型,需要手工转【这点不同于java】‘abc’+str(9) * :string*n #创建一个新字符串重复n次原来的串 [] :string[n] #从字符串中获取对应位置的一个字符 [:] :string[n:m] #截取字符串,如果为:m从头到m如果为n:从n到尾 in :char in string #判断一个字符是否在串中,如果在返回为真(True) not in :char not in string #判断一个字符是否不在串中,如果在返回为真(True) r/R : r/Rstring #禁止转义字符的实际意义,整个字符为原始意义 len() : 长度len(s) </code></pre> <p>2.类型转换</p> <ul> <li>字符串和数字相互转换</li> </ul> <p>字符串到数字int/float/long</p> <p>数字到字符串str</p> <pre> <code class="language-python">>>> int(42) 42 >>> int('42') 42 >>> str(42) '42' >>> float('42.0') 42.0 >>> str(42.0) '42.0' </code></pre> <p>或者使用string模块的函数</p> <p>s:进行转换的字符串, base:可选,目标进制</p> <pre> <code class="language-python">import string string.atoi(s[,base]) #base默认为10,如果为0,那么s就可以是012或0x23这种形式的字符串,如果是16那么s就只能是0x23或0X12这种形式的字符串
string.atol(s[,base]) #转成long
string.atof(s[,base]) #转成float </code></pre> <ul> <li>字符串和列表的转换</li> </ul> <p>字符串转列表:</p> <pre> <code class="language-python">s=’spam’ l = list(s) l2 = "hello world".spilt() </code></pre> <p>列表转字符串</p> <pre> <code class="language-python">k = ‘’.join(l) </code></pre> <p>注意,不能join列表中的非字符串</p> <p>3.修改字符串</p> <pre> <code class="language-python">s = s + ’a’ s = s[3:] + ‘b’ s = s.replace(‘pl’,’pa’) a = '' #赋值空 del a #整个变量删除 </code></pre> <p>4.索引和分片</p> <p>索引s[i]</p> <pre> <code class="language-python">s[0]首个 s[-1] = s[len(s)-1] 倒数第一个 </code></pre> <p>分片s[i:j]</p> <pre> <code class="language-python">不含上边界,s[1:3] 取[1-2] s[1:]取1到结束 s[:3] 取开始到2 s[:-1]开始到倒数第二个 s[:]开始到结尾,相当于一个复制 s[1:10:2] 取1-9,步长=2 s[a:b:-2] 步长为负数,两个边界意义反转了,表示从b+1到a,步长-2 s=’abcdefg’ s[5:1:-1] 得到 fedc s[1:3] == s[slice(1,3)] 内置函数 </code></pre> <h3>字符串格式化</h3> <p>这里只介绍基本字符串格式化,扩展在后续篇幅介绍%c 单个字符%d 十进制整数%o 八进制整数%s 字符串%x 十六进制整数,其中字母小写%X 十六进制整数,其中字母大写</p> <pre> <code class="language-python">>>> str = "so %s a day!" >>> str % 'beautiful' 'so beautiful a day!' >>> '{0} is {1}'.format('a','b') 'a is b' >>> template = "{0}, {1} and {2}" >>> template.format('a', 'b', 'c') 'a, b and c' </code></pre> <p> </p> <h3>内建函数列表</h3> <p>【字符串方法是python文本处理头号工具】</p> <p>string.capitalize()</p> <p>字符串第一个字符大写</p> <p>string.center(width,[,fill])</p> <p>原字符居中,空格填充至width长度</p> <p>string.count(str,beg=0,end=len(string))</p> <p>获得字符串中某一个子串的数目,计算出现次数,可指定范围</p> <p>string.decode(encoding=’UTF-8’,errors=’strict’)</p> <p>解码字符串,出错默认报ValueError,除非errors是ignore或replace</p> <p>string.encode(encoding=’UTF-8’,errors=’strict’)</p> <p>string.endswith(suffix,beg=0,end=len(string))</p> <p>是否以**结尾</p> <p>string.expandtabs(tabsize=8)</p> <p>把字符串中tab转为空格,默认8个</p> <p>string.find(str,beg=0,end=len(stirng))</p> <p>检测是否包含str,存在返回开始索引,否则返回-1</p> <p>string.index(str,begin=0,end=len(string))</p> <p>同find,不存在报异常,ValueError</p> <p>string.isalnum()</p> <p>至少一个字符,且所有字符均为字母或数字,True. 检测字符串是否只包含0-9A-Za-z</p> <p>string.isalpha()</p> <p>至少一个字符,所有字符都是字母,True. 检测字符串是否只包含字母</p> <p>string.isdecimal()</p> <p>只包含十进制数,True</p> <p>stirng.isdigit()</p> <p>只包含数字,True. 检测字符串是否仅包含数字</p> <p>string.islower()</p> <p>至少一个区分大小写字符且所有字符小写,True. 检测字符串是否均为小写字母</p> <p>string.isnumeric()</p> <p>只含数字字符,True</p> <p>string.isspace()</p> <p>只包含空格,True. 检测字符串是否均为空白字符</p> <p>string.istitle()</p> <p>标题化字符,True. 检测字符串中的单词是否为首字母大写</p> <p>string.isupper()</p> <p>至少一个区分大小写字符且所有字符大写,True. 检测字符串是否均为大写字母</p> <p>string.join(seq)</p> <p>以string作为分隔符,seq中所有元素合并为新的字符串. 将原字符串插入参数字符串中的每两个字符之间</p> <p>string.ljust(width)</p> <p>返回一个原字符串左对齐,空格补充至长度width</p> <p>string.lower()</p> <p>转小写. 将字符串全部转为小写</p> <p>string.lstrip()</p> <p>截掉左侧的空格</p> <p>string.partition(str)</p> <p>= find+split,从str出现第一个位置,截断为pre_str,str,after_str元组,不含str则pre_str=strstring.replace(str1,str2,num=string.count(str1))替换,指定不超过num次,可作为模板实现</p> <p>string.rfind(str,beg=0,end=len(string))</p> <p>同find,右边开始</p> <p>string.rindex(str,beg=0,end=len(string))</p> <p>同index,右边开始</p> <p>string.rjust(width)</p> <p>右对齐,空格补齐</p> <p>string.rpartition(str)</p> <p>同partition,右边开始</p> <p>string.rstrip([chars])</p> <p>清理右侧空白,包括换行符,返回处理后字符串</p> <p>string.split(str=””, maxsplit =string.count(str))</p> <p>以str切片,可指定分割次数, 分割字符串,返回列表,默认分隔符空格</p> <p>string.splitlines(num=string.count(‘\n’))</p> <p>s.splitlines([keepends])按行分隔,可指定分割次数</p> <p>string.startswith(obj,beg=0,end=len(string))</p> <p>以str开头,True. 检测字符串是否以某一子串开头</p> <p>string.strip([obj])</p> <p>在string上执行lstrip和rstrip</p> <p>string.swapcase</p> <p>反转string中大小写. 字符串中小写转大写,大写转小写</p> <p>string.title()</p> <p>标题花,单词首字母大写,其余小写</p> <p>string.translate(str,del=””)</p> <p>s.translate(table)根据str给出表转换string字符,要过滤的字符放在del参数中</p> <p>string.upper()</p> <p>转大写. 将字符串全部转为大写</p> <p>string.zfill(width)</p> <p>返回长度width的字符串,原字符串右对齐,前面填充0</p> <p>len(string)</p> <p>获取字符串的长度</p> <h3>最佳实践</h3> <p>1.循环中用到长度</p> <pre> <code class="language-python">while i < len(stri): #修改 size = len(stri) while i < size </code></pre> <p>2.字符串追加</p> <pre> <code class="language-python">l = ['a', 'b'] result = '' for i in l: result += i #修改 result = ''.join(l) </code></pre> <h3>其他</h3> <p>1.转义符</p> <p>几个常用:</p> <pre> <code class="language-python">\n换行,\\反斜杠 \t制表 \'单引号 \r回车 \"双引号 </code></pre> <h3>后续需扩展</h3> <pre> <code class="language-python">字符串编码详解 字符串格式化 正则表达式 字符串涉及常用模块(序列化/文本包装等)</code></pre> <p> </p> <p>来自: http://my.oschina.net/u/155352/blog/735655</p> <p> </p>