日期处理

mooncake_utils.date.datediff(dt, base=None, unit='day')[source]

用来计算分两个datetime的相差天数或者分钟数。

如果不显示的指定base,则计算与当前时间的diff

Parameters:
  • dt – input date
  • base – 基准日期
  • unit – 计算粒度,可选的有 day, hour , minute , second
mooncake_utils.date.datetime2timestamp(date)[source]

datetime格式转时间戳(int)

mooncake_utils.date.gen_date_list(begin, end, join=False, exclude=[], exclude_today=True)[source]

生成指定起始到结束之内的日期列表,注意同gen_date_list_by_days对比。

mooncake_utils.date.gen_date_list_by_days(begin=None, days=7, join=False, exclude=[])[source]

生成指定的时间list

Parameters:
  • begin – 起始日期,默认要求datetime类型,如果是str会自动尝试解析成datetime
  • days – 生成距离begin的最近几天
  • join – 是否将list按照,拼接。hadoop的input目录常用
  • exclude – 去除日期。 统计数据时常用,统计最近7天,不过某几天数据损坏需要去掉某几天。
>>> gen_date_list_by_days(begin ='20170620', days=3) # 今天2017-6-24
['20170619', '20170618', '20170617']
>>> gen_date_list_by_days(begin ='20170620', days=3, exclude=['20170618']) # 今天2017-6-24
['20170619', '20170617']
>>> gen_date_list_by_days(days=3) # 今天2017-6-24
['20170623', '20170622', '20170621']
>>> gen_date_list_by_days(days=3, join = True) # 今天2017-6-24
'20170623,20170622,20170621'
mooncake_utils.date.gen_latest_date_list(begin, end, join=False, exclude=[])[source]

已废弃,请用gen_date_list

mooncake_utils.date.gen_today(delta=1, raw=False, short=True, with_time=False, only_time=False)[source]

生成当天的日期

Parameters:
  • delta – 时间偏移量
  • raw – 如果设置为``True``,返回``datetime``类型, 否则返回``str``类型
  • short – 若为True, 会返回精简时间,如20170101,否则返回2017-01-01
  • with_time – 是否添加时间,否则只返回日期
  • only_time – 是否只返回时间,不加日期
>>> gen_today(delta=0, with_time=True)
20170624145222
>>> gen_today(delta=0, with_time=True, short=False)
2017-06-24 15:06:12
>>> gen_today(delta=0, only_time=True, short=False)
15:06:12
>>> gen_today(delta=0, only_time=True)
150612
>>> gen_today(delta=0, with_time=False)
20170624
>>> gen_today(delta=1, with_time=False)
20170623
mooncake_utils.date.str2date(date)[source]

str解析成datetime, 会尝试各种格式解析

>>> str2date('20170101')
<type 'datetime.datetime'>
>>> str2date('2017-01-01')
<type 'datetime.datetime'>
>>> str2date('2017-01-01 11:11:22')
<type 'datetime.datetime'>
mooncake_utils.date.str2datetime(date, date_format='%Y-%m-%d %H:%M:%S')[source]

固定格式的str转datetime

mooncake_utils.date.timestamp2datetime(timestamp)[source]

时间戳转datetime

Parameters:timestamp – str or int or float
Returns:返回datetime

Cython编译辅助

mooncake_utils.cython_build.build()[source]

数据处理

mooncake_utils.data.parse_float(m, default=0.0)[source]
Parameters:
  • m
  • default
mooncake_utils.data.parse_int(m, default=0)[source]
Parameters:
  • m
  • default
mooncake_utils.data.read_mmap(fn)[source]
Parameters:fn
mooncake_utils.data.trunc(f, n=4)[source]
Parameters:
  • f
  • n

特征抽取

class mooncake_utils.feature.FeatureHasher(size=1000, hash_module='city', debug=False, print_collision=False, dense=False, use_col_index=False)[source]

一个简易的特征抽框架

初始化特征类参数

Parameters:
  • size – 特征总维度,也就是哈希桶的数目.
  • hash_module – 采用的哈希库,可选 city, mmh3
  • debug – 打印debug信息
  • print_collision – 是否打印冲突率
  • dense – 是否生成稠密结果
  • use_col_index – 特征采用下标还是用哈希结果
check_valid(obj)[source]
collision()[source]
dense_format(label, obj)[source]
format(label, obj)[source]
hash(obj)[source]
list_hash(key, obj, ret)[source]
number_hash(key, value)[source]
single_hash(key, value, ret, index)[source]
string_hash(key, value)[source]

文件操作

mooncake_utils.file.mkdirp(directory)[source]

利用python库来做到shell中的 mkdir -p

好处是不用 os.system(),避免了fork进程造成的资源浪费。

Parameters:directory – 路径
mooncake_utils.file.rglob(p)[source]
mooncake_utils.file.rm_folder(path, debug=False)[source]

清空文件夹

Parameters:debug – 若为True,则只打印日志,不执行删除操作。

Hadoop相关

class mooncake_utils.hadoop.Hadoop(run_date, conf_path='./conf/hadoop.conf')[source]

Hadoop-Streaming

conf = <ConfigParser.ConfigParser instance>
copy_to_hadoop_retry(command, opath='')[source]
filter_input(days, input_base)[source]
has_hadoop_dir(opath)[source]
has_hadoop_file(path, filename)[source]
load_conf()[source]
pack_upload()[source]
prepare_local_dirs()[source]
run(input_path, get_result_to_local=True, need_alert=False, getmerge=False)[source]
run_date = None
run_hadoop_retry(command, opath='')[source]
mooncake_utils.hadoop.gen_input_date(per_day, days=10)[source]

日志辅助

mooncake_utils.log.get_logger(debug=True, name='mu.log', with_file=False)[source]
Parameters:
  • debug
  • name
  • with_file

彩色print辅助类

mooncake_utils.termcolor.colored(text, color=None, on_color=None, attrs=None)[source]

Colorize text.

Available text colors:
red, green, yellow, blue, magenta, cyan, white.
Available text highlights:
on_red, on_green, on_yellow, on_blue, on_magenta, on_cyan, on_white.
Available attributes:
bold, dark, underline, blink, reverse, concealed.
Example:
colored(‘Hello, World!’, ‘red’, ‘on_grey’, [‘blue’, ‘blink’]) colored(‘Hello, World!’, ‘green’)
mooncake_utils.termcolor.cprint(text, color=None, on_color=None, attrs=None, **kwargs)[source]

Print colorize text.

It accepts arguments of print function.

报警模块

mooncake_utils.alert.alert(msg, mail=True, slack=True, channel='#mooncake')[source]

用来发送报警,支持邮件和Slack

Parameters:
  • msg – 报警内容
  • mail – 是否开启邮件报警
  • slack – 是否开启slack报警
  • channel – slack报警的接收频道
mooncake_utils.alert.send_slack(msg, channel='#mooncake')[source]

Send Message to Slack

Parameters:
  • msg (str.) – 报警内容.
  • channel (str.) – 接收报警的频道.
Returns:

bool – the return code.

Raises:

AttributeError, NetworkError

mooncake_utils.alert.slack = <slacker.Slacker object>

alert module

命令行相关

class mooncake_utils.cmd.cmd_builder(bin_base, conf, pretty=False)[source]
bin_base = None
build()[source]
conf = None
get(p)[source]
pool = {}
pretty = False
put(p, value=None)[source]
use_all_conf()[source]
mooncake_utils.cmd.gen_cmd(base, params, pretty=False)[source]
mooncake_utils.cmd.isarg(pos)[source]
mooncake_utils.cmd.isint(x)[source]
mooncake_utils.cmd.md5(path)[source]

为文件生成相应的md5sum。

Parameters:path – 需要生成md5的路径,如 ./output/final.dat

执行成功后产出 ./output/final.dat.md5

mooncake_utils.cmd.run_cmd(cmd, debug=False)[source]

运行一个shell命令,并且打印结果。 注意,这里是阻塞运行。

Parameters:
  • cmd – 需要执行的命令 如 ls -alh
  • debug – 如果设置True则不执行cmd,仅打印相关日志
mooncake_utils.cmd.run_cmd_noblock(cmd, debug=False)[source]

作用同 run_cmd, 不过这里是非阻塞的。

Parameters:
  • cmd – 需要执行的命令 如 ls -alh
  • debug – 如果设置True则不执行cmd,仅打印相关日志
mooncake_utils.cmd.setarg(pos, val)[source]