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:一位的周几,并假设周一为一周第一天)
二、问题分析
阅读问题,发现我们要做的事情是以下几点:
从文件名中匹配出日期信息,需要使用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{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模块的知识。
- python复习笔记(一)
- Hibernate复习笔记(一)
- Java复习笔记(一)
- 数据结构复习笔记(一)
- 数据结构复习笔记(一)
- 数据库复习笔记(一)
- Java复习笔记(一)
- Java复习笔记(一)
- Mybatis复习笔记(一)
- sql 复习笔记(一)
- jQuery复习笔记(一)
- 计算机网络复习笔记(一)
- 计算机网络复习笔记(一)
- python复习笔记
- python 基础复习笔记
- python复习笔记
- javaEE复习笔记(一)servlet
- JSP/Servlet复习笔记(一)
- 遍历HashMap取出所有的Key和Value
- Ajax请求
- 禾木秋韵
- 【python+mysql】数据库的连接与释放
- Android生存指南:解Bug策略和思路
- python复习笔记(一)
- 读取properties文件的内容配置数据库
- Ubuntu安装Intellij IDEA 15
- windows环境下批处理实现守护进程
- Java 逻辑运算符&、&&、|、||
- MyEclipse 首次配置
- 理解OAuth 2.0
- PCB之Gerber文件
- CSS 的优先级机制