python编程精要(4)---Python字符串编程

前言

本系列博文为Python编程精粹和要点,相关内容没有系统性可言,仅记录我在使用python过程觉得最关键和常用的东西,并不是python编程入门笔记,适合有一定编程经验的朋友。

Python字符串编程

Python经常需要处理文本字符串,依据本人最近的经验,无非要完成数据读取、字符串分隔、过滤(去掉空行,去掉首尾空格等)、查找等操作,下面来看看具体是如何使用的。

  1. 打开文件,对匹配的目标行进行处理,保留其它行,最后存为新文件

    filename = "test.log"
    newfilename = filename+"_bak"
    keyword= "server nginx"
    newlines = "" #用于存放新字符串文本,最后保存到文件中
    
    with open(filename, 'r', encoding='utf-8') as f:
       for line in f.readlines():
           if(keyword in line): #对有keyword的行做处理
               i+=1
               newline = line.replace("\n","")+" id %d" % (i) +"\n"#替换\n为空格,并在其后面加入相关字符串
               newlines += newline
            else:#其它行不做特殊处理
               newlines += line
    
    with open(newfilename, "w") as f:#最后写到新文本中
        f.writelines(newlines)
  2. 对字符串分隔,并挑选出感兴趣的字段

    分隔使用split()函数,前提是字符串的格式是固定的,如果不是固定,那么很可能在处理其它串的时间出现bug。

    split()返回的结果是分隔后的子字符串列表。

    假如有这么一串字符串,要提取出域名位置的内容https://blog.csdn.net/rosetta应该怎么办呢?

    In [1]: string1='Apr  3 04:00:05 127.0.0.1 haproxy[226376]: 132.12.43.6:57669/18.123.134.89:80 0/0/7/44/51 404 600/249 {|Mozilla/5.0||https://blog.csdn.net/rosetta} "GET /test.jpg HTTP/1.1"'
    In [2]: string1.split()#默认以空格分隔
    Out[2]: 
    ['Apr',
    '3',
    '04:00:05',
    '127.0.0.1',
    'haproxy[226376]:',
    '132.12.43.6:57669/18.123.134.89:80',
    '0/0/7/44/51',
    '404',
    '600/249',
    '{|Mozilla/5.0||https://blog.csdn.net/rosetta}',
    '"GET',
    '/test.jpg',
    'HTTP/1.1"']
    
    In [3]: string1.split('|')#指定以竖线分隔
    Out[3]: 
    ['Apr  3 04:00:05 127.0.0.1 haproxy[226376]: 132.12.43.6:57669/18.123.134.89:80 0/0/7/44/51 404 600/249 {',
    'Mozilla/5.0',
    '',
    'https://blog.csdn.net/rosetta} "GET /test.jpg HTTP/1.1"']
    
    In [21]: string1.split(" ",3)#只对前面三个空格分隔,后面的不分隔
    Out[21]: 
    ['Apr',
    '',
    '3',
    '04:00:05 127.0.0.1 haproxy[226376]: 132.12.43.6:57669/18.123.134.89:80 0/0/7/44/51 404 600/249 {|Mozilla/5.0||https://blog.csdn.net/rosetta} "GET /test.jpg HTTP/1.1"']
    
    In [27]: string1.split()[-4]#获取倒数第四个分片
    Out[27]: '{|Mozilla/5.0||https://blog.csdn.net/rosetta}'
    
    In [28]: string1.split()[-4].split('|')#对第四个分片分隔
    Out[28]: ['{', 'Mozilla/5.0', '', 'https://blog.csdn.net/rosetta}']
    
    In [29]: string1.split()[-4].split('|')[-1]#取最后一个
    Out[29]: 'https://blog.csdn.net/rosetta}'
    
    In [30]: string1.split()[-4].split('|')[-1].split('}')#以右大括号分隔
    Out[30]: ['https://blog.csdn.net/rosetta', '']
    
    In [31]: string1.split()[-4].split('|')[-1].split('}')[0]#取第一个
    Out[31]: 'https://blog.csdn.net/rosetta'

    到此,域名已经取出,目标已经达到

  3. 去除左右空格

    如下字符串,以竖线分隔后的字符串前后会含有空格

    In [32]: string2="start |Mozilla/5.0| www.baidu.com| blog.csdn.net/rosetta"
    In [34]: string_list = string2.split('|')
    Out[34]: ['start ', 'Mozilla/5.0', ' www.baidu.com', ' blog.csdn.net/rosetta']
    
    In [69]: new_list = []
       ...: for x in string_list:#需要遍历list,然后调用strip()去除空格
       ...:     new_list.append(x.strip())
       ...:     
    
    In [70]: new_list
    Out[70]: ['start', 'Mozilla/5.0', 'www.baidu.com', 'blog.csdn.net/rosetta']
  4. 拼接

    对目标字符串的部分内容进行拼接

    In [72]: string3='Apr  3 04:00:05 127.0.0.1'#取本字符串以空格分隔后的前三段,拼接成新字符串
    
    In [73]: string3.split()
    Out[73]: ['Apr', '3', '04:00:05', '127.0.0.1']
    
    In [75]: ' '.join(string3.split()[0:3])
    Out[75]: 'Apr 3 04:00:05'
    

好了,如果能对以上内容可以达到随心所用的话,python的字符串处理基本上问题就不大了,一些其它常用的字符串操作,比如replace()替换,大小写转换,字母数字判断等等内容可参考《Python学习手册》第四版第7章字符串。

参考书籍:

《Python编程手册》第四版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值