python複習筆記(一)

2021-07-09 11:28:21 字數 3139 閱讀 5985

一、問題獲取

今天在網上閒逛的時候,偶然看到了乙個系類教程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 寫入字串,非...