一、問題獲取
今天在網上閒逛的時候,偶然看到了乙個系類教程python快速教程,點進去看看別人的心得經驗,順便鞏固一下python基礎知識,看到python標準庫01 正規表示式 (re包)的時候,下邊有乙個小小的練習,順手一做並記錄下來。題目如下:
練習二、問題分析有乙個檔案,檔名為output_1981.10.21.txt 。下面使用python: 讀取檔名中的日期時間資訊,並找出這一天是週幾。將檔案改名為output_yyyy-mm-dd-w.txt (yyyy:四位的年,mm:兩位的月份,dd:兩位的日,w:一位的週幾,並假設周一為一周第一天)
從檔名中匹配出日期資訊,需要使用re模組
通過日期資訊獲取星期資訊,需要datetime模組
將日期以yyyy-mm-dd-w的格式格式化之後替換掉原來名字中的yyyy.mm.dd格式
三、re & datetime簡單複習
1、re模組四、問題解答re模組是python用於支援正規表示式的模組,其中常用的函式和方法有:
函式/方法
描述re.compile(pattern, flags=0)
對正規表示式經行編譯,並返回乙個regex物件
re.match(pattern, string, flags=0)
嘗試從字串開頭用正規表示式pattern匹配字串string,成功返回匹配物件,否則返回none。匹配不超過一次。
re.search(pattern, string, flags=0)
類似match, 但可以從string任意位置開始匹配
re.findall(pattern, string, flags=0)
在字串中搜尋所有匹配pattern的位置, 返回匹配物件列表
re.split(pattern, string, max=0)
內建split函式的正規表示式版本
re.sub(pattern, repl, string, max=0)
將string中匹配pattern的位置替換成repl
group(num=0)
返回全部匹配物件或指定編號的物件
groups()
返回包含所有匹配物件的元組
2、datetime模組
datetime中定於了用於時間日期的多個類,如datetime.date, datetime.time, datetime.datetime, datetime.temedelta, 其中最常用的是datetime.datetime類。
datetime是date與time的結合體,包括date與time的所有資訊。它的建構函式如下:datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ),各引數的含義與date、time的建構函式中的一樣,要注意引數值的範圍。
datetime、date、time都提供了strftime()方法,該方法接收乙個格式字串,輸出日期時間的字串表示。格式化方法在python官方文件理由詳細說明。
首先我們來建立需要的正規表示式,假設我們要處理的檔案都是以output開頭,以.txt作為字尾的檔案,只是檔名中段以時間日期來命名,之前腦袋一抽把日期以點來分隔,現在發現名字裡好多點想要修改,我們的正規表示式可以這樣寫
>>>
import re
>>> pattern = r'^output_\d\.\d\.\d\.txt$'
# ^ 表示開始
# $ 表示結束
# \d 表示n個數字
# \. 為了不讓"."匹配任意字元,所以需要用"\"進行轉意
# 我們還可以把表示式寫成帶名字引數的模式
>>> pattern = r'^output_(?p\d)\.(?p\d)\.(?p\d)\.txt$'
>>> regex = re.compile(pattern)
接下來我們就可以對字串進行匹配了, 我們我們選取re.match因為我們希望從頭匹配
>>> m = re.match(regex, 'output_1981.10.21.txt')
>>> m.group('year')
'1981'
我們可以通過呼叫re.group來獲取我匹配項,可以看到返回值是string型別的,而datetime.datetime接受的是intger型別的變數,所以需要轉換一下。並且生成我們用於替換的子字串。
>>> year, month, day = map(int, m.groups())
>>> match_date = datetime.datetime(year, month, day)
>>> replacement = match_date.strftime('%y-%m-%d-%a')
我們先把獲取到的匹配值轉換成intger傳給datetime.datetime用於生成日期時間物件,然後又用strftime函式將它轉換成我們要替換的子字串,(雖然題目要求星期只寫一位,但是一位可能會出現重複導致不清楚,所有沒有寫成一位星期)接下來就要完成替換了
>>> new_name = re.sub(r'\d\.\d\.\d',replacement, 'output_1981.10.21.txt')
>>> new_name
'output_1981-10-21-wed.txt'
至此,簡單複習了正規表示式和datetime模組的知識。 Python 複習筆記 一
1.將字元存入檔案 logfile open tmp mylog.txt a 以追加方式開啟 tmp mylog.txt檔案,此時logfile類似於c語言的檔案指標 print logfile,fatal error invalid input 將 fatal error invalid inpu...
python基礎 複習整理筆記(一)
這是我的第一篇博文,部落格也不知道最終會變成什麼樣,但是我想從這一刻開始,從不完美開始 本文僅作為複習和補充使用,總結歸納多不系統,悉知 歡迎拍磚 交流 指正 一 我的常用工具 1.python直譯器,version 3.6 2.ide pycharm version 2017.2 anaconda...
Python複習筆記 檔案
open filename,mode mode 唯讀 r 只寫 w 追加 a 讀寫 r 二進位制讀 rb,wb,ab,r b read 讀全部檔案 read size 讀size個位元組 readline 讀開始一行 readlines 讀所有行到乙個list write string 寫入字串,非...