一、str.split和re.split的基本用法
1、str.spli的基本用法
现用下面的文件:
1 maqing:abc123
我们要建立一个用户名和用户密码的匹配关系:
1 with open("test.txt","r") as file: 2 list = file.readlines() 3 for line in list: 4 user,pwd =line.strip().split(":") #split按照“:”将文件中内容分为两个值,然后再分别赋值给user,pwd 5 print("我是用户名:",user) 6 print("我是用户密码:",pwd)
输出结果如下:
1 我是用户名: maqing 2 我是用户密码: abc123
2、re.split的基本用法
Python的str类有split方法,但是这个split方法只能根据指定的某个字符分隔字符串,如果要同时指定多个字符来分隔字符串,该怎么办呢?
幸运的是python的re模块中提供的split方法可以用来做这件事情,如下代码示例:
1 import re 2 re.split('; |, ',str)
实例:
1 >>> a='Beautiful, is; better*than ugly' 2 >>> import re 3 >>> re.split('; |, |*| ',a) 4 ['Beautiful', 'is', 'better', 'than', 'ugly']
二、str.split("s")与re.split("s",str)的区别
str.split("s")与re.split("s",str)是不一样的。
两者区别如下:
1,str.split("s")是照字面上来按照"s"字符来分割字符串
2,re.split("s", str)是按照空白来分割,因为正则表达式中的"s"就是空白space的意思
另外,正则表达式中的中括号意为列举,如[abc]则能匹配含有a或b或c的字符串。
另外python的lambda(实际来自lisp)则能定义匿名函数:
看个例子:
1 g = lambda x:x+1
看一下执行的结果:
g(1)
>>>2
g(2)
>>>3
当然,你也可以这样使用:
lambda x:x+1(1)
>>>2
可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体,用函数来表示为:
1 def g(x):
2 return x+1
非常容易理解,在这里lambda简化了函数定义的书写形式。是代码更为简洁,但是使用函数的定义方式更为直观,易理解。
所以了解了以上这些之后,第一眼看上去完全看不懂的语句现在可以懂了:
get_dt_from_str = lambda time_str: datetime(tzinfo=utils.LOCAL_TIMEZONE, *([int(i) for i in re.split("[s:-]", time_str)]))
start_time = get_dt_from_str(start_time) if start_time else None
上面这两个表达式,第一个表达式定义了一个函数,这个函数是根据传入的时间字符串参数,把这个时间字符串
转化为当前时区的datetime参数,这个lambda的第一个变量就是函数传入的参数。在这个表达式中:
re.split("[s:-]", time_str) 是把time_str这个变量根据空白,:以及- 分割成为字符串list,并分别处理。
所以第二个表达式就可以根据上面定义的匿名函数来直接调用使用了。