python高级编程技巧(5)

一. 如何拆分含有多种分隔符的字符串

实际案例:

  1. 我们要把某个字符串依据分隔符号拆分不同的字段,该字符串包含多种不同的分隔符,例如:
    拆分 s = 'ab;cd|efgh|hi,jkl|mn\topq;rst,uvw\txyz'
    其中<,>,<;>,<|>,<\t>都是分隔符号
解决方案:

方法1. 连续使用 str.split() 方法,每次处理一种分隔符号。
方法2. 使用正则表达式的 re,split() 方法,一次性拆分字符串。(推荐使用

代码示例:
# _*_ coding:utf-8 _*_
# @Author   : TianYu
# @Time     : 2017/10/12 15:55
# @File     : 拆分含多种分隔符的字符串.py

#拆分 s = 'ab;cd|efgh|hi,jkl|mn\topq;rst,uvw\txyz'
#其中<,>,<;>,<|>,<\t>都是分隔符号

#单一分隔符
s = 'liushuo 15196 0.0 0.0 22565 2872 pts/11 R+ 13:50 0:00 ps aux'#提取每个字段
s.split() #空白字符:空格、\t、\n等都是
print(s.split())
#['liushuo', '15196', '0.0', '0.0', '22565', '2872', 'pts/11', 'R+', '13:50', '0:00', 'ps', 'aux']

#方法 1 :连续使用str.split()方法,每次处理一种分隔符(不推荐,不优)
s = 'ab;cd|efgh|hi,jkl|mn\topq;rst,uvw\txyz'
res = s.split(';')
print(list(map(lambda  x: x.split('|'),res)))#结果变成二维列表
#[['ab'], ['cd', 'efgh', 'hi,jkl', 'mn\topq'], ['rst,uvw\txyz']]

#降维:二维变一维
t = [] #临时列表
print(list(map(lambda  x: t.extend(x.split('|')),res)))# [None, None, None]
print(t) #['ab', 'cd', 'efgh', 'hi,jkl', 'mn\topq', 'rst,uvw\txyz']

res = t
t = []
print(list(map(lambda  x: t.extend(x.split(',')),res)))#[None, None, None, None, None, None]
print(t)#['ab', 'cd', 'efgh', 'hi', 'jkl', 'mn\topq', 'rst', 'uvw\txyz']

#总结规律得出一个函数
def mySplit(s, ds):
    res = [s]

    for d in ds:
        t = []
        list(map(lambda x: t.extend(x.split(d)), res))
        res = t
    return [x for x in res if x] #过滤空字符串(当字符串中出现连续的分隔符时会产生空字符串)

s = 'ab;cd|efgh|hi,jkl|mn\topq;rst,uvw\txyz'
print(mySplit(s,';,|\t'))

#方法 2 : 使用正则表达式的re.split()方法,一次性拆分字符串(推荐使用)
import re

s1 = 'ab;cd|efgh|hi,jkl|mn\topq;rst,uvw\txyz'
print(re.split('[,;\t|]+', s1))

二. 如何判断字符串 a 是否以字符串 b 开头或结尾

实际案例:

  1. 某文件系统目录下有一系列文件:
    quicksort.c
    graph.py
    heap.java
    install.sh
    stack.cpp
    ......
    编写程序给其中所有 .sh 文件和 .py 文件加上用户可执行权限
解决方案:

1.使用字符串的str.startswith()str.endswith()方法
注意:多个匹配时参数使用元组

代码示例:
# _*_ coding:utf-8 _*_
# @Author   : TianYu
# @Time     : 2017/10/12 16:29
# @File     : 判断字符串a是否以字符串b开头或结尾.py

#使用字符串的str.startwith()和str.endswith()方法
#注意:多个匹配时参数使用元组
import os,stat

s1 = list(os.listdir('.')) #文件路径
print(s1)#当前目录下的文件名
s = 'a1.txt'
print(s.endswith('.txt')) #True
print(s.endswith('.py')) #False
print(s.endswith(('.txt','.py'))) # Ture  只能是元组,不能是列表

#使用列表解析对结果进行过滤
ss = [name for name in os.listdir('.') if name.endswith(('.txt','.py'))]
print(ss)
#读取文件权限
print(os.stat('a1.txt').st_mode) #33206
print(oct(os.stat('a1.txt').st_mode)) #0o100666
#在stat中找到掩码
print(stat.S_IXUSR)
#修改文件权限
os.chmod('a1.txt',os.stat('a1.txt').st_mode | stat.S_IXUSR) #增加一个权限

三. 如何调整字符串中文本的格式

实际案例:

  1. 某软件的log文件,其中的日期格式为‘yyyy-mm-dd’:
    ......
    2016-05-23 10:59:26 status unpacked python....
    2016-05-23 10:59:26 status install python....
    2016-05-23 10:59:26 status half -configured ....
    2016-05-23 10:59:26 configure python.whl:aa....
    ......
解决方案:
  1. 使用正则表达式re.sub()方法做字符串替换,利用正则表达式的捕获组,捕获每个部分内容,在替换字符串中调整各个捕获组的顺序。
代码示例:
# _*_ coding:utf-8 _*_
# @Author   : TianYu
# @Time     : 2017/10/13 16:04
# @File     : 如何调整字符串中文本的格式.py

#其实就是字符串替换问题

import re

log = open('a1.txt').read()

#re.sub('(\d{4})-(\d{2})-(\d{2})',r'\2/\3/\1', log) #(\d{4}) 是一个正则表达式捕获组,其他类似
#'\2/\3/\1' 代表 替代格式为 月/日/年

#起别名(推荐使用)
re.sub('(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})',r'\g<month>/\g<day>/\g<year>', log)

#结果为:日期格式变为05/23/2016

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

推荐阅读更多精彩内容