学习前提:
1、需要有编程基础,可以不熟悉Python。
步骤非常简单,在此不详细展开。
请参考教程:Python3的安装(Windows)
MacOS一般都会自带2.X版本的Python,一般都额外装一个Python3版本。
操作有Windows版本类似,此处不再详细说明,自己可找教程。
代码及演示教程:Python模拟日志生成
1、设置字符集
#coding=UTF-8
2、导入包
import random
如果需要导入包的特定模块,并重命名,则可如下所示:
from pyquery import PyQuery as pq
3、定义数组
url_paths = [
"article/112.html",
"article/113.html",
"article/114.html",
"article/115.html",
"article/116.html",
"article/117.html",
"article/118.html",
"article/119.html",
"video/821",
"tag/list"
]
ip_splices = [102,71,145,33,67,54,164,121]
数组最后一个元素不需要加英文逗号,字符串与其他语言一样,用双引号括起来。
4、定义函数
def sample_url():
return random.sample(url_paths,1)[0]
函数体只需要在函数名右边加上冒号:
即可,Python语言必须要有缩进,函数体的范围就是根据缩进来确认的。
5、for循环
def sample_ip():
splice = random.sample(ip_splices,4)
return ".".join([str(item) for item in splice])
任意取ip_splices里的四个数字,转成字符串,并用点.
连接起来。
def sample_referer():
if random.uniform(0, 1) > 0.2:
return "-"
refer_str = random.sample(http_referers, 1)
query_str = random.sample(search_keyword, 1)
return refer_str[0].format(query=query_str[0])
随机取一个http_referers,如取到了:https://www.baidu.com/s?wd={query},
再随机取一个query_str,如:Docker搭建Spark集群(实践篇)
,然后通过format方法,将query_str赋值到{query}里,最终将会得到类似于这样的结果:https://www.baidu.com/s?wd=Docker搭建Spark集群(实践篇)
。此处需要注意的是random.sample(http_referers, 1)
取到的是一个数组,所以,之后使用的时候,还需要取到里面的值,如:refer_str[0]
。
def generate_log(count = 10):
time_str = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
f = open("D:\\python-logs.txt","w+")
while count >= 1:
generate_log = "{ip}\t{localtime}\t \"GET /{url} HTTP/1.1 \" \t{referer}\t{code}".format(
url = sample_url(),
ip = sample_ip(),
referer = sample_referer(),
code = sample_status_code(),
localtime = time_str
)
print generate_log
f.write(generate_log + "\n")
count = count - 1
代码解释:
1、time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
,time.localtime()为获取本地时间,然后按照特定的格式进行格式化。
strftime()参考教程:Python time strftime()方法
2、f = open("D:\\python-logs.txt","w+")
,新建一个文件f
,w+
的意思是:表示权限为可读可写,如果待打开文件已存在,会先清空,不存在则创建。
open()参考教程:Python中的open()方法总结
3、print generate_log
,打印输出
4、f.write(generate_log + "\n")
,写到f
文件里。
# URL IP信息 referer 状态码 日志访问时间
if __name__ == '__main__':
generate_log(100)
main函数,主方法。
1、Python有五个标准的数据类型
Numbers
(数字)
String
(字符串)
List
(列表)
Tuple
(元组)
Dictionary
(字典)
Python支持四种不同的数字类型:
int
(有符号整型)
long
(长整型[也可以代表八进制和十六进制])
float
(浮点型)
complex
(复数)
注意:在Python 2.2 以后的版本中,int 类型数据溢出后会自动转为long类型。long 类型只存在于 Python2.X 版本中,在 Python3.X 版本中 long 类型被移除了,使用 int 替代。
!/usr/bin/python
与#!/usr/bin/env python
的区别是?
#!/usr/bin/python
指去/usr/bin/
目录下找python
执行
#!/usr/bin/env python
指去#!/usr/bin/env
中找到python
的安装路径,然后去执行它,此处可执行的python路径不管是不是在/usr/bin下都行,用法比较灵活,而#!/usr/bin/python
就写成了绝对路径,只能去/usr/bin
下找。
结论:推荐使用 #!/usr/bin/env python
作者简介:邵奈一
全栈工程师、市场洞察者、专栏编辑
| 公众号 | 微信 | 微博 | CSDN | 简书 |
福利:
邵奈一的技术博客导航
邵奈一 原创不易,如转载请标明出处。