文档章节

python cookbook 2字符串(3)

xiaoanyunfei
 xiaoanyunfei
发布于 2015/04/18 21:09
字数 750
阅读 15
收藏 0

11从字符串中清除不想保留的字符

可以用strip()清除字符串,默认清除空格,换行符,也可以提供需要清除的字符,还有lstrip()和rstrip().

>>> t = '-----hello====='
>>> t.strip()
'-----hello====='
>>> t.strip('-')
'hello====='
>>> t.strip('-=')
'hello'
需要注意一点,strip()无法清除字符串中间的字符,可以用replace或常量表达式
>>> s=' hello  world'
>>> s.replace('e','')
' hllo  world'
>>> import re
>>> re.sub('ll','',s)
' heo  world'

12清洗文本,仅针对python3(python2和3编码方式不同)

>>> s = 'pýtĥöñ\fis\tawesome\r\n'
>>> s
'pýtĥöñ\x0cis\tawesome\r\n'
>>> remap = {ord('\t') : ' ',
... ord('\f') : ' ',#换页
... ord('\r') : None
... }
>>> a = s.translate(remap)
>>> a
'pýtĥöñ is awesome\n'
>>> import unicodedata
>>> b = unicodedata.normalize('NFD', a)#特殊字符全部采用两个字符组合的形式分解
>>> b
'pýtĥöñ is awesome\n'
>>> b.encode('ascii', 'ignore').decode('ascii')#忽略其中有异常的编码Unicode---ascii(过滤掉异常字符)-----Unicode
'python is awesome\n'
>>> b.encode('ascii', 'ignore')
b'python is awesome\n'

str.replace()速度更快一些,即使是多次运行,也比translate()快一些

13文本的排版

>>> text = 'Hello World'
>>> text.ljust(20)
'Hello World         '
>>> text.rjust(20)
'         Hello World'
>>> text.center(20)
'    Hello World     '
还可以提供一些填充符
>>> text.rjust(20,'=')
'=========Hello World'
>>> text.center(20,'*')
'****Hello World*****'
format也可以用于简单排版,<^>代表左中右
>>> format(text, '>20')
'         Hello World'
>>> format(text, '<20')
'Hello World         '
>>> format(text, '^20')
'    Hello World     '
也可以指定填充符
>>> format(text, '=>20s')
'=========Hello World'
>>> format(text, '*^20s')
'****Hello World*****'
format还可以按指定格式输出多个字符和指定小数位数
>>> '{:>10s} {:>10s}'.format('Hello', 'World')
'     Hello      World'
>>> x = 1.2345
>>> format(x, '^10.2f')
'   1.23   '
一些老代码中还可能见到如下形式,不推荐使用
>>> '%-20s' % text
'Hello World         '
>>> '%20s' % text
'         Hello World'

14组合连接字符串

join可以拼接list
>>> parts = ['Is', 'Chicago', 'Not', 'Chicago?']
>>> ' '.join(parts)
'Is Chicago Not Chicago?'
>>> a = 'Is Chicago'
>>> b = 'Not Chicago?'
也可以用+拼接,注意+拼接不是最有效,每次拼接都相当于创建了一个新的对象,推荐用extend和join
>>> a + ' ' + b
'Is Chicago Not Chicago?'
也可以采用没有+的拼接
>>> a = 'Hello' 'World'
>>> a
'HelloWorld'
#如果仅仅是为了打印,python3中提供了分隔符标志位
print(a, b, c, sep=':')
对于一些IO操作,需要慎重考虑,如果两个字符串很小,version1比较合适,由于一些内在的IO系统调用的消耗
# Version 1 
f.write(chunk1 + chunk2)
# Version 2 
f.write(chunk1)
f.write(chunk2)
但是如果字符串较大,version2更有效,避免创建临时str变量和拷贝的内存消耗
也可以考虑用yield生成器,避免过多的内存消耗

15字符串中插入变量

>>> s = '{name} has {n} messages.'
>>> s.format(name='Guido', n=37)
'Guido has 37 messages.'
>>> name = 'Guido'
>>> n = 37
>>> s.format_map(vars())#***仅python3提供
#内建的 vars()函数接受类对象作为参数,返回类的__dict__属性的内容。
'Guido has 37 messages.'
#format和format_map在变量缺失时会抛出异常
可以在一个字典类中定义一个__missing__方法
>>> class safesub(dict):
...      def __missing__(self, key):
...          return '{' + key + '}'
... 
>>> del n
>>> s.format_map(safesub(vars()))
'Guido has {n} messages.'
类似的还可以使用string.Template,但是更推荐使用format.
>>> import string
>>> s = string.Template('$name has $n messages.')
>>> s.substitute(vars())
'Guido has 37 messages.'


© 著作权归作者所有

xiaoanyunfei
粉丝 0
博文 12
码字总数 11094
作品 0
海淀
私信 提问
那些年,我们读过的python!

Python是一个强大、快速、易学、友好、开源的脚本语言。Hacker必备的语言之一。 Python - 历史由来 Python 是一种开源的面向对象的脚本语言,它起源于1989年末,当时,CWI(阿姆斯特丹国家数...

生气的散人
2014/03/21
1K
2
《Python Cookbook》第三版中文版发布

人生苦短,我用 python! 我一直坚持使用 python3,因为它代表了python的未来。虽然向后兼容是它的硬伤,但是这个局面迟早会改变的, 而且python3的未来需要每个人的帮助和支持。 目前市面上...

一刀
2015/12/29
7K
65
用python来解析xml文件(简单情况)

首先,sax解析最直观,当然,也可以容许xml文件出些错。 先给定一个xml文件book.xml, < catalog > < book isbn ="0-596-00128-2" > < title > Python & XML < author > Jones, Drake < book ......

晨曦之光
2012/04/12
405
0
希望有英文好的大牛帮忙翻译一本书,O'REILLY家的《learning python 5th》

我是一名python初学者,原来是做linux系统运维的。刚接触python 对于初学者来说,难的就是入门,而python3好的入门书籍特别少。当我看完简明python3教程之后,发现唯一好的,能入门python3.X...

tianshoulong
2015/07/26
1K
11
python 字符串的translate方法

最近在学习Python cookbook,遇到字符串的translate方法,发现功能很强大,但有点难以理解,于是在网上查阅资料和官方文档,记下自己的理解,有误的地方,请多多指教。 translate的用法如下:...

jackliu8722
2012/07/12
4.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
10
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
1K
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部