一、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\nugly' 2 >>> import re 3 >>> re.split('; |, |\*|\n',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,並分別處理。
所以第二個表達式就可以根據上面定義的匿名函數來直接調用使用了。
