python复习笔记(一)

来源:互联网 发布:淘宝steam慈善包哪里 编辑:程序博客网 时间:2024/06/05 00:25

一、问题获取

今天在网上闲逛的时候,偶然看到了一个系类教程python快速教程,点进去看看别人的心得经验,顺便巩固一下python基础知识,看到Python标准库01 正则表达式 (re包)的时候,下边有一个小小的练习,顺手一做并记录下来。题目如下:

练习
有一个文件,文件名为output_1981.10.21.txt 。下面使用Python: 读取文件名中的日期时间信息,并找出这一天是周几。将文件改名为output_YYYY-MM-DD-W.txt (YYYY:四位的年,MM:两位的月份,DD:两位的日,W:一位的周几,并假设周一为一周第一天)

二、问题分析

阅读问题,发现我们要做的事情是以下几点:

  1. 从文件名中匹配出日期信息,需要使用re模块

  2. 通过日期信息获取星期信息,需要datetime模块

  3. 将日期以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{4}\.\d{2}\.\d{2}\.txt$'#  ^ 表示开始#  $ 表示结束#  \d{n} 表示n个数字#  \. 为了不让"."匹配任意字符,所以需要用"\"进行转意# 我们还可以把表达式写成带名字参数的模式>>> pattern = r'^output_(?P<year>\d{4})\.(?P<month>\d{2})\.(?P<day>\d{2})\.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{4}\.\d{2}\.\d{2}',replacement, 'output_1981.10.21.txt'>>> new_name'output_1981-10-21-Wed.txt'

至此,简单复习了正则表达式和datetime模块的知识。

0 0
原创粉丝点击