使用python简单模拟日志输出
使用模块:
- os–>文件模块,判断文件是否存在;
- datetime–>日期模块,类似Java里的calendar作用,主要用于日期与字符串之间相互转换;
- time–>日期和时间戳的相互转换;
- random–>随机数,math–>四舍五入;
- json–>把字典转为json格式
生成日志要求为UTF-8文件,和hadoop平台匹配
- settings–>Editor–>File and Code Templates–>python scripts–>
#!/usr/bin/env python
# -*- coding:utf-8 -*-
json格式有空格,使用
代码如下:
import datetime
import time
import random
import math
import json
import os
def createLogFileByDate(begin, over, path):
# 判断文件目录是否存在,如果不存在则创建
if os.path.exists(path) == False:
os.mkdir(path,777)
# 先把输入的字符串转为日期格式,两个日期相减
addDay = (datetime.datetime.strptime(over, "%Y-%m-%d") - datetime.datetime.strptime(begin, "%Y-%m-%d")).days
# 把字符串转为日期格式
t = datetime.datetime.strptime(begin, "%Y-%m-%d")
# 把日期转为字符串格式
timestr = t.strftime("%Y-%m-%d")
for i in range(addDay):
for j in range(10000):
# 创建文件,并写入内容 #"D:/LearningNotes/数仓项目/数仓version_03/logmake_py/log"
with open(path + "/log_" + timestr + ".log", "a") as f:
f.write(logContentPerDay(timestr,j))
# 把字符串转为日期格式
t = datetime.datetime.strptime(timestr, "%Y-%m-%d")
# 日期增加一天
delta = datetime.timedelta(days=1)
t = delta +t
# 把日期转为字符串格式
timestr = t.strftime("%Y-%m-%d")
evs = ["CLICK", "MOVE", "CART", "ORDER"]
def logContentPerDay(timestr,j):
# 随机生成1-100000用户的编号
userid = str(random.randint(0, 100000))
# 随机生成4个事件之一
event = evs[math.floor(random.randint(0, 3))]
# 按照每8秒产生一条数据 生成1条事件
timeArray = time.strptime(timestr, "%Y-%m-%d")
timeStamp = str(int(time.mktime(timeArray)) + j * 8)+"000"
# 生成商品信息1-5000000商品信息
no = str(random.randint(0, 5000000) + 1)
goodinfo = str(json.dumps(dict(No=no, title="商品" + no, price=10000.0, shopid=1, mark="mark"),ensure_ascii=False,separators=(",",":")))
# 生成移动端信息
app = json.dumps(dict(appid=123456, appversion="11.1.0"))
# 生成用户的系统信息
os = "6.0.0"
os_version = "android"
# 生成浏览器信息
browse = json.dumps(dict(browsetype="chrome", browseversion="82.0"))
# 判断是APP还是网页版
divice = str(app if random.randint(0, 1) == 1 else browse)+"\n"
# 组合起来
infos = userid + " " + event + " " + timeStamp + " " + goodinfo + " " + os + " " + os_version + " " + divice
return infos
if __name__ == '__main__':
createLogFileByDate("2020-7-1","2020-12-31","本地路径\logmake_py")
# print(logContentPerDay("2020-1-1",2))