python高级编程技巧(6)

一. 如何将多个小字符串拼接成一个大的字符串

实际案例:

  1. 在设计某网络程序时,我们自定义了一个基于UDP的网络协议,按照固定次序向服务器传递一系列参数:
    hwDetect: "<0112>"
    gxDepthBits: "<32>"
    gxResolution: "<1024x768>"
    gxRefresh: "<60>"
    fullAlpha: "<1>"
    lodDist: "<100.0>"
    DistCull: "<500.0>"
解决方案:

方法1. 迭代列表,连续使用 ‘+’ 操作,依次拼接每一个字符
方法2. 使用 str.join() 方法,更加快速的拼接列表中所有字符。(推荐使用

代码示例:
# _*_ coding:utf-8 _*_
# @Author   : TianYu
# @Time     : 2017/10/13 16:19
# @File     : 如何将多个小字符串拼接成一个大的字符串.py

#方法 1 :使用 '+' 号
s1 = 'abcdefg'
s2 = '12345'
print(s1 + s2)# 本质上是运算符重载:str.__add__(s1, s2)
print(s1 > s2) #True :str.__gt__(s1, s2)

#################################################

pl = ["<0112>", "<32>", "<1024x768>", "<60>", "<1>", "<100.0>", "<500.0>"]

# 方法 1 (不推荐,存在巨大的浪费)
s = '' #空字符串进行拼接
for p in pl:
    s += p
print(s)

#方法 2(推荐使用,列表很长的情况下):使用str.join()方法,更加快速的拼接列表中的所有字符串
print(''.join(pl)) #一次性的拼接,不浪费

#当列表中的数据类型不同时 如何进行字符串的拼接?
s = ['abc', 123, 45, 'xyz']
print(''.join([str(x) for x in s])) #列表解析,不推荐,生成新的列表,在文件很大的情况下不适用
#推荐使用生成器表达式,[] 变为 ()
print(''.join((str(x) for x in s))) #(str(x) for x in s)是generator object(生成器对象)

二. 如何对字符串进行左、右、居中对齐?

实际案例:

  1. 某个字典存储一系列属性值,
    {
    "DistCull":500.0,
    "SmallCull":0.04,
    "farclip":366,
    "lodDist":100.0,
    "trilinear":40
    }
    在程序中,我们想以以下工整的格式将其内容输出,如何处理?
    输出:
    DistCull : 500.0
    SmallCull : 0.04
    farclip : 366
    lodDist : 100.0
    trilinear : 40
解决方案:

方法1.使用字符串的 str.ljust(), str.rjust(), str.center() 方法进行左右居中对齐。
方法2.使用 format()方法,传递类似'<20', '>20', '^20'参数完成同样任务。

代码示例:
# _*_ coding:utf-8 _*_
# @Author   : TianYu
# @Time     : 2017/10/13 16:38
# @File     : 如何对字符串进行左右居中对齐.py

#方法1 :使用字符串的str.ljust(),str.rjust(),str.center()进行左右居中对齐。
s = 'abc'
print(s.ljust(20, '='))# 宽度为20,不足的用 '=' 补齐:abc=================
print(s.rjust(20, '*'))#与左对齐相同:*****************abc
print(s.center(20, '-'))#同上:--------abc---------

#方法2 :使用format()方法,传递类似'<20','>20','^20'参数完成左右中对齐
s1 = 'xyz'
print(format(s, '>20'))#右对齐,宽度为20,不足的用空格填充
print(format(s, '<20'))#左对齐,同上
print(format(s, '^20'))#居中,同上

#示例:
d ={
    "DistCull":500.0,
    "SmallCull":0.04,
    "farclip":366,
    "lodDist":100.0,
    "trilinear":40
}
w = max(map(len,d.keys()))#找出字典中键的最大长度
for k in d:
    print(k.ljust(w),':', d[k])
"""
输出结果:
DistCull  : 500.0
SmallCull : 0.04
farclip   : 366
lodDist   : 100.0
trilinear : 40
"""

三. 如何去掉字符串中不需要的字符?

实际案例:

  1. 过滤掉用户输入中前后多余的空白字符:
    nick2008@gmail.com
  2. 过滤某windows下编辑文本中的‘\r’:
    'hello world\r\n'
  3. 去掉文本中的unicode组合符号(音调):
    u‘ní hǎo, chī fàn’
解决方案:

方法1. 字符串strip(), lstrip(), rstrip()方法去掉字符串两端字符
方法2. 删除单个固定位置的字符,可以使用切片+拼接的方式
方法3. 字符串的replace()方法或正则表达式re.sub()删除任意位置字符。
方法4. 字符串translate()方法,可以同时删除多种不同字符。

python3的 translate()方法用法。

注意:translate()方法的使用在Python2与Python3中存在很大的差异,主要是因为Python2与3中字符串的语义的变化:
Python2 python3
----------------------------
str -> bytes
unicode -> str


代码示例:
# _*_ coding:utf-8 _*_
# @Author   : TianYu
# @Time     : 2017/10/14 21:24
# @File     : 如何去掉字符串中不需要的字符.py

#方法 1 :str.strip()

s = '   abc   123  '
print(s.strip()) #去掉字符串两边(开头与结尾)的空白字符
print(s.lstrip()) #去掉字符串左边的空白字符
print(s.rstrip()) #去掉字符串右边的空白字符

s = '---abc++++'
print(s.strip('-+')) #去掉字符串两边与传入的参数匹配的字符

#####################################

#方法 2 :切片+拼接

s = 'abc:123'
s1 = s[:3] + s[4:] #切片操作,左闭右开
print(s1)

#方法 3 :replace() 或者 re.sub()

s = '\tabc\t123\txyz' #字符串中带有3个空白符 \t
print(s.replace('\t',''))

import re
s = '\tabc\t123\txyz\ropq\r'
s1 = re.sub('[\t\r]', '', s)#替换任意多的字符
print(s1)

#方法 4 :translate()

#(1)
s = 'abc1230323xyz'
# str.maketrans('abcxyz','xyzabc') #映射表关系,进行加密:abc--xyz,  xyz--abc
s1 = s.translate(str.maketrans('abcxyz','xyzabc'))
print(s1) #xyz1230323abc

#(2):与Python2的差异是:Python3中是对'bytes'进行处理,而不是‘string'
s2 = b'abc\refg\n\2343\t'
#translate()有两个参数:
# 第一个为None代表不做任何映射关系,第二个参数表示要删除的字符
print(s2.translate(None ,b'\r\t\n') )

# 转换为大写,并删除字母o
bytes_tabtrans = bytes.maketrans(b'abcdefghijklmnopqrstuvwxyz', b'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
print(b'runoob'.translate(bytes_tabtrans, b'o'))

##############################

#去除Unicode字符中的音调
import sys
import unicodedata
s = "Zhào Qián Sūn Lǐ Zhōu Wú Zhèng Wáng"
remap = {
    # ord返回ascii值
    ord('\t'): '',
    ord('\f'): '',
    ord('\r'): None
    }
# 去除\t, \f, \r

a = s.translate(remap)
'''
  通过使用dict.fromkeys() 方法构造一个字典,每个Unicode 和音符作为键,对于的值全部为None
  然后使用unicodedata.normalize() 将原始输入标准化为分解形式字符
  sys.maxunicode : 给出最大Unicode代码点的值的整数,即1114111(十六进制的0x10FFFF)。
  unicodedata.combining:将分配给字符chr的规范组合类作为整数返回。 如果未定义组合类,则返回0。
'''
cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode) if unicodedata.combining(chr(c))) #此部分建议拆分开来理解
b = unicodedata.normalize('NFD', a)
'''
   调用translate 函数删除所有重音符
'''
print(b.translate(cmb_chrs))

要努力要奋斗
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,590评论 18 139
  • 数据类型 数据类型由三部分组成身份(id)、类型(type)、值。看对象有没有改变使用id(object)查看对象...
    letry阅读 351评论 0 0
  • 比起母亲节的提前预热,声势浩大,父亲节的前奏冷冷清清,仿佛这个节日根本不存在。 母亲节与父亲节同样是舶来品,怎么待...
    恒痴阅读 298评论 0 2
  • 我们都曾以为遇到了可以携手一辈子的人,在倾尽所有后,却被告知这趟列车不能到达我想要的终点,然后带着无尽的失落和满身...
    随笔日记官网阅读 544评论 0 0
  • 《王妃逆天·废柴二小姐》 【第一章】我是废柴?! “二小姐!你你不要吓奴婢啊!二小姐!你快醒醒啊啊!你怎么会想不开...
    顾笙楠M阅读 771评论 0 1