python日期数据清洗_数据清洗之微博时间清洗

数据清洗之微博时间清洗

爬取微博的时候时间格式比较乱,存到数据库要统一成datatime类型,所以需要用到对时间的转换

这里是对time模块和datetime的模块的使用。

对于当天的有三种:

40秒前

50分钟前

今天 08:12

针对这三种,第一步要做的是获取当前的年月日

import datetime

now = datetime.datetime.now()

ymd = now.strftime("%Y-%m-%d")

#或者

#datetime.day,datetime.month,datetime.year 分别表示一个datetime对象的日,月,年

解释

第一行我们导入datetime模块

第二行获取当前的时间,datetime类型:

```

2018-07-20 09:28:19.080791

```

包含年月日和时分秒

第三行,strftime函数是格式化字符里面的参数是一个输出的字符串格式:

比如这里 的%Y代表四个数字表示的年份(%y是二位的),%m是表示月份,%d返回的是当前时间是当前月的第几天,其他的格式看下面的图有详细的解释。

![](https://images2018.cnblogs.com/blog/736399/201807/736399-20180720110353893-108208662.jpg)

接上我们分析第一个,

40秒前

第一步:获取当前的时间

上面已经获取now了。

第二步:减去40s

时间上的加减我们使用datetime的timedalte属性,

timedalte 是datetime中的一个对象,该对象表示两个时间的差值。

timedalte 的构造函数如下:

def __init__(self, days: float = ..., seconds: float = ..., microseconds: float = ...,

milliseconds: float = ..., minutes: float = ..., hours: float = ...,

weeks: float = ...) -> None: ...

于是就有了下面的结果

newdate = now - datetime.timedelta(minutes=int(seconds[:-2]))

同理

50分钟前

newdate = now - datetime.timedelta(minutes=int(newstr[:-3]))

然后说最后另一种:

今天 08:12

第一步:补齐年月日

第二步:使用time模块的strptime() 函数根据指定的格式把一个时间字符串解析为时间元组,

语法

strptime()方法语法:

time.strptime(string[, format])

参数

string -- 时间字符串。

format -- 格式化字符串。

返回值

返回struct_time对象。

日期格式化符号:

%y 两位数的年份表示(00-99)

%Y 四位数的年份表示(000-9999)

%m 月份(01-12)

%d 月内中的一天(0-31)

%H 24小时制小时数(0-23)

%I 12小时制小时数(01-12)

%M 分钟数(00=59)

%S 秒(00-59)

%a 本地简化星期名称

%A 本地完整星期名称

%b 本地简化的月份名称

%B 本地完整的月份名称

%c 本地相应的日期表示和时间表示

%j 年内的一天(001-366)

%p 本地A.M.或P.M.的等价符

%U 一年中的星期数(00-53)星期天为星期的开始

%w 星期(0-6),星期天为星期的开始

%W 一年中的星期数(00-53)星期一为星期的开始

%x 本地相应的日期表示

%X 本地相应的时间表示

%Z 当前时区的名称

%% %号本身

第三步:time.mktime转换成时间戳

第四步:使用datetime的fromtimestamp模块,把时间戳转换为

mdate = time.mktime(time.strptime(ymd + newstr, '%Y-%m-%d今天 %H:%M'))

newdate = datetime.datetime.fromtimestamp(mdate)

其他的处理思路就一样了,下面代码给出目前遇到的格式:

def get_format_datetime(self,datestr):

now = datetime.datetime.now()

ymd = now.strftime("%Y-%m-%d")

y = now.strftime("%Y")

newstr = datestr

newdate = now

if u"楼" in datestr:

newstr = datestr.split(u"楼")[-1].strip()

if (u"今天" in newstr):

mdate = time.mktime(time.strptime(ymd + newstr, '%Y-%m-%d今天 %H:%M'))

newdate = datetime.datetime.fromtimestamp(mdate)

elif (u"月" in newstr):

mdate = time.mktime(time.strptime(y + newstr, '%Y%m月%d日 %H:%M'))

newdate = datetime.datetime.fromtimestamp(mdate)

elif (u"分钟前" in newstr):

newdate = now - datetime.timedelta(minutes=int(newstr[:-3]))

elif (u"秒前" in newstr):

newdate = now - datetime.timedelta(minutes=int(newstr[:-2]))

#以下为手机端

elif "-" in newstr:

mdate = time.mktime(time.strptime(y+"-"+ newstr, '%Y-%m-%d'))

newdate = datetime.datetime.fromtimestamp(mdate)

elif (u"昨天" in newstr):

mdate = time.mktime(time.strptime(ymd + newstr, '%Y-%m-%d昨天 %H:%M'))

newdate = datetime.datetime.fromtimestamp(mdate)-datetime.timedelta(days=1)

elif (u"小时前" in newstr):

newdate = now - datetime.timedelta(hours=int(newstr[:-3]))

else:

newdate = datetime.datetime.strptime(newstr, "%Y-%m-%d %H:%M")

return newdate

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值