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>