Python实现像awk一样分割字符串

若你使用过 Shell 中的 awk 工具,会发现用它来分割字符串是非常方便的。特别是多个连续空格会被当做一个处理。

[root@localhost ~]# cat demo.txt
hello world
[root@localhost ~]#
[root@localhost ~]# awk '{print$1,$2}' demo.txt
hello world

可是转换到 Python 上面来呢?结果可能是这样的。

>>> msg='hello world'
>>> msg.split(' ')
['hello', '', '', '', 'world']

与我预想的结果不符,多个空格会被分割多次。

那有什么办法可以达到 awk 一样的效果呢?

有两种方法。

第一种方法

不加参数,这种只适用于将多个空格当成一个空格处理,如果不是以空格为分隔符的场景,这种就不适用了。

>>> msg='hello world'
>>> msg.split()
['hello', 'world']

第二种方法

使用 filter 来辅助,这种适用于所有的分隔符,下面以 - 为分隔符来举例。

>>> msg='hello----world'
>>> msg.split('-')
['hello', '', '', '', 'world']
>>>
>>> filter(None, msg.split('-'))
['hello', 'world']

是不是很神奇,filter 印象中第一个参数接收的是 函数,这里直接传 None 居然有奇效。

查看了注释,原来是这个函数会适配 None 的情况,当第一个参数是None的时候,返回第二个参数(可迭代对象)中非空的值,非常方便。

换用函数的写法,可以这样

>>> msg='hello----world'
>>> msg.split('-')
['hello', '', '', '', 'world']
>>>
>>> filter(lambda item: True if item else False, msg.split('-'))
['hello', 'world']

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python分割和拼接字符串

    关于string的split 和 join 方法对导入os模块进行os.path.splie()/os.path.join() 貌似是处理机制不一样,但是功能上一样. 1.string.split(str=' ',num=string.count(str)): 以str为分隔,符切片string,如果num有指定值,则仅分隔num个子字符串.S.split([sep [,maxsplit]]) -> 由字符串分割成的列表 返回一组使用分隔符(sep)分割字符串形成的列表.如果指定最大分割数,则在

  • 在Python中用split()方法分割字符串的使用介绍

    split()方法返回的字符串中的所有单词的列表,使用str作为分隔符(如果在未指定的所有空格分割),可选择限当前分割为数量num. 语法 以下是split()方法的语法: str.split(str="", num=string.count(str)). 参数 str -- 这是任何分隔符,默认情况下是空格. num -- 这是要分割的行数. 返回值 此方法返回行列表. 例子 下面的示例演示了split()方法的使用. #!/usr/bin/python str = "Li

  • Python使用正则表达式分割字符串的实现方法

    如下: re.split(pattern, string, [maxsplit], [flags]) pattern:表示模式字符串,由要匹配的正则表达式转换而来. string:表示要匹配的字符串. maxsplit:可选参数,表示最大的拆分次数. flags:可选参数表示标志位,用于控制匹配方式,如是否区分子母大小写 示例代码: import re pattern = r'[?|&]' # 定义分隔符 url = 'http://www.baidu.com/login.jsp?usernam

  • python字符串分割及字符串的一些常规方法

    字符串分割,将一个字符串分裂成多个字符串组成的列表,可以理解为字符串转列表,经常会用到 语法:str.split(sep, [,max]),sep可以指定切割的符号,max可以指定切割的次数(次数不常用) 不带参数时以空格进行分割 带参数时,以该参数进行分割 未查询到分隔符时,列表只包含原始字符串 source ="1,2,3,4,5,,6" print source.split(',') #按照索引取值[] source ="1,2,3,4,5,,6" print

  • Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    去空格及特殊符号 s.strip().lstrip().rstrip(',') Python strip() 方法用于移除字符串头尾指定的字符(默认为空格). 复制字符串 #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sStr2 = sStr1 sStr1 = 'strcpy2' print sStr2 连接字符串 #strcat(sStr1,sStr2) sStr1 = 'strcat' sStr2 = 'append' sStr1 += sStr2 print

  • Python 字符串操作实现代码(截取/替换/查找/分割)

    Python 截取字符串使用 变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾. 复制代码 代码如下: # 例1:字符串截取str = '12345678'print str[0:1]>> 1   # 输出str位置0开始到位置1以前的字符print str[1:6]  >> 23456   # 输出str位置1开始到位置6以前的字符num = 18str = '0000' + str(num) # 合并字符串pr

  • python 按照固定长度分割字符串的方法小结

    有如下的一堆mac地址,需要更改成一定格式,如mac='902B345FB021'改为mac='90-2B-34-5F-B0-21'. 借助python脚本,可以轻松实现,原理就是:字符串的按照固定长度拆分. 1,文件mac.txt,保存了如下的mac地址: 50E549E32ECB 902B3413EFA6 50E549ECBA1C 902B3457B16F 1C6F65296DF9 902B34131A14 50E549E3E2F8 50E5493A2696 902B345FB021 902

  • Python实现统计英文单词个数及字符串分割代码

    字符串分割 复制代码 代码如下: str="a|and|hello|||ab" alist = str.split('|') print alist 结果 复制代码 代码如下: str="a hello{这里换成5个空格}world{这里换成3个空格}" alist=str.split(' ') print alist 统计英文单词的个数的python代码 复制代码 代码如下: # -*- coding: utf-8 -*- import os,sys info =

  • python按照多个字符对字符串进行分割的方法

    本文实例讲述了python按照多个字符对字符串进行分割的方法.分享给大家供大家参考.具体分析如下: 这段python代码通过这规则表达式对字符串进行分割,使用\w作为分割符,只要不是字母和数字的就会被分割开来. import re DATA = "Hey, you - what are you doing here! welcome to jb51?" print re.findall(r"[\w']+", DATA) 输出结果如下 复制代码 代码如下: ['Hey

  • Python实现像awk一样分割字符串

    若你使用过 Shell 中的 awk 工具,会发现用它来分割字符串是非常方便的.特别是多个连续空格会被当做一个处理. [root@localhost ~]# cat demo.txt hello world [root@localhost ~]# [root@localhost ~]# awk '{print$1,$2}' demo.txt hello world 可是转换到 Python 上面来呢?结果可能是这样的. >>> msg='hello world' >>>

  • 怎么处理Python分割字符串时有多个分隔符

    在使用 Python 处理字符串的时候,有时候会需要分割字符. 分隔符比如下划线 "_",比如 "."之类的. 一个分隔符 比如对于文件名 20191022_log.zip,我们想要获取前面的日期. 如果日期格式固定,对于这样的字符串我们当然可以使用索引进行切割. 当然也可以使用字符串的内建函数 split().  结果返回的是一个列表. 如果分隔符不在字符串之列,那么返回的也是一个列表,不过元素只有一个,那就是这个字符串自身:  多个分隔符 还是上面那个例子,如果

  • Python re.split方法分割字符串的实现示例

    目录 re.split方法 问题 解决方案 讨论 re.split方法 注:使用前需要引入包(import re) 功能:split能够按照所能匹配的字串将字符串进行切分,返回切分后的字符串列表 形式: re.split(pattern, string[, maxsplit=0, flags=0]) pattern:匹配的字符串 string:需要切分的字符串 maxsplit:分隔次数,默认为0(即不限次数) flags:标志位,用于控制正则表达式的匹配方式,比如:是否区分大小写 问题 你需要

  • Python简单实现两个任意字符串乘积的方法示例

    本文实例讲述了Python简单实现两个任意字符串乘积的方法.分享给大家供大家参考,具体如下: 题目: 给定两个任意数字组成的字符串,求乘积,字符可能很大,但是python具有无限精度的整数在这里就不需要考虑这个问题了 下面是简单的实现: #!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:两个任意字符串乘积 ''' def two_strs_mutiply(one_str, two_str): ''''' ''' if on

  • Python中常用的8种字符串操作方法

    拼接字符串 使用"+"可以对多个字符串进行拼接 语法格式: str1 + str2 >>> str1 = "aaa" >>> str2 = "bbb" >>> print(str1 + str2) aaabbb 需要注意的是字符串不允许直接与其他类型进行拼接,例如 >>> num = 100 >>> str1 = "hello" >

  • python 读txt文件,按‘,’分割每行数据操作

    按行读取TXT文件 fname = './新建文件夹/yob2010.txt' //文件夹路径 with open(fname,'r+',encoding='utf-8') as f: for line in f.readlines(): //按行读取每行 print(line[:-1].split(',')) //切片去掉换行符,再以','分割字符串 ,得到一个列表 s = [i[:-1].split(',') for i in f.readlines()] //列表生成器,将文件每行数据按上

  • Python中CSV文件(逗号分割)实战操作指南

    目录 一.csv文件介绍 1.csv文件简介 2.为什么要使用csv文件 二.csv文件查看 1.测试文件创建 2.查看csv文件(列表) 3.查看csv文件(字典) 4.写入文件(列表) 5.写入文件(字典) 总结 一.csv文件介绍 1.csv文件简介 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本).纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据.CSV

随机推荐