前言
本系列博文为Python编程精粹和要点,相关内容没有系统性可言,仅记录我在使用python过程觉得最关键和常用的东西,并不是python编程入门笔记,适合有一定编程经验的朋友。
Python字符串编程
Python经常需要处理文本字符串,依据本人最近的经验,无非要完成数据读取、字符串分隔、过滤(去掉空行,去掉首尾空格等)、查找等操作,下面来看看具体是如何使用的。
打开文件,对匹配的目标行进行处理,保留其它行,最后存为新文件
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)
对字符串分隔,并挑选出感兴趣的字段
分隔使用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'
到此,域名已经取出,目标已经达到
去除左右空格
如下字符串,以竖线分隔后的字符串前后会含有空格
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']
拼接
对目标字符串的部分内容进行拼接
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编程手册》第四版