python在个人工作中的应用

python在个人工作中的应用

本来没想写这些的东西,有网友提出了这个问题,所以就简单描述一下python在各种工作中的应用。

提问思考原文链接

接触python原因

之前简单说明过自己什么选择计算机,选择python

学习python的时候,最大的动力,就是我很容易写出了一个软件。这样的动力不断的让我觉得编程很简单, 只要自己有好的思路,自己就能使用python快速的实现。

python在生活中的应用

爬虫和数据处理

通俗来讲就是将一个网站上的页面保存下来,比如很久以前喜欢看煎蛋的无聊图连接,有时候没时间看, 又会错过比较好看的图片,好在煎蛋比较有趣的图片,大家都会点赞。所以只要每天下载安点赞最高的图片,就能保证不错过好看的图片。

程序实现思路:

  • 每天晚上12点定时去查看图片点赞比较高的图片
  • 下载点赞较高的图片

当然我们还见过特别无耻的行为, 比如把某些网站的图片,直接使用爬虫抓取图片连接,然后将连接发布到自己的网站,我们称之为盗链, 网站的流量还是比较贵的,这样的行为会遭受很大的损失。

在工作中,经常会有一些爬虫任务,当年毕业时候,毕业设计是《抓取拉钩网的招聘职位并且分析招聘数据》

数据分析

当然我们经常经常也会看到,很多帖子:

我用Python分析了42万字的歌词,为了搞清楚民谣歌手们在唱些什么

我用Python做了六百万字的歌词分析,告诉你中国Rapper都在唱些啥

分析股票相关信息

之前在微博上,看到有一个博士在搞美股投资,为了测试新浪股票能不能买入,在完全不看新浪财报的情况下,分析新浪微博的发展趋势。

分析方式: * 每天多个时段,去抓取新浪首页的最热微博 * 将评论数量,点赞数量,转发数量进行记录 * 将数据整理之后,做成统计图,可以看到新浪微博在几个月之内数据活跃性在不断上升。 * 决定买入新浪股票

当然上述方式,需要抓取数据,需要存储数据,需要做成图表。 使用python全部解决,并且不需要过多的计算机知识,你只要知道怎么抓取数据,怎么存储数据,怎么做成图表。 当然别的编程语言,也可以做到。

数据展示

折现图,还是饼状图,二维图片,还是三维图。

python写起来都很简单。

并且因为不需要编译,所以加上我们更改了数据,马上再次运行。就能看到更改之后的展示,极大的提高了纠错的效率。

以上三点,不需要太多的计算机知识,就可以做出你想要东西,并且可以完全说和计算机没什么关系,就是采集数据和统计数据。

谋生技能

web开发

当上免的各种数据抓取、分析结束之后,我们需要展示,这个时候,可以使用python的开发web来展示。同样,也可以不用。web知识过多, 非专业人员,只要做好数据分析就行。

游戏开发

最初自己写的一个游戏是使用python的模块,pygame做的游戏,很简单的贪吃蛇。但是我开心了好多天。因为很简单就完成了。成就感特别足。

linux服务器处理

现在运维已经大多数必备python技能了,当然他们还是以linux shell技能为主。

大数据开发

都是噱头,没啥好看的,或者好说的。用什么语言都差不多。

字节协议理解和处理

字节协议理解和处理

理解字节协议

做web的开发的程序员,经常接触http协议,http协议因为已经在多个框架中进行了实现,所以不需要距离理解http协议是如何, 建立在,tcp/ip协议上实现的。仅仅需要知道,一些关于http状态码,这就成了他们对http协议的理解。

当然我们这里暂时不说http协议的具体问题,只是由http协议引出,字节协议。

http协议

创建一个socket server 服务器,在浏览器输入服务器地址和端口,可以看到服务器返回数据。

这个是最简单的webscoket,不需要处理client发送过来的数据,仅仅在访问时候,将服务端数据返回。

python http 服务器端代码

运行python 代码,启动服务器,浏览器输入:http://127.0.0.1:5000/

可以看到返回

Hello, World!asdfasdf

再看看服务端python代码:

#!-*-coding-utf8-*-
import socket

HOST, PORT = '', 5000

HOST = ''
PORT = 5000

"""http proto test"""

listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind((HOST, PORT))
listen_socket.listen(100)


print 'Serving HTTP on port %s ...' % PORT

while True:
    client_connection, client_address = listen_socket.accept()
    print "client_connection", client_connection, client_address

    request = client_connection.recv(1024)
    print "request",request

    http_response = """
HTTP/1.1 200 OK
Hello, World!asdfasdf
"""
    client_connection.sendall(http_response)
client_connection.close()

http_response 这个字符串最终被发送给了客户端,也就是浏览器,浏览器最终展示出来的结果只有。

Hello, World!asdfasdf

也就是说明:

HTTP/1.1 200 OK

这行,被浏览器处理,不会显示在网页上。我们去掉这行时候,是否还能展示Hello, World!asdfasdf,可以自己测试一下。

当然,这样的协议看似很简单。就是带上特殊的字符串。然后在返回值填写。不需要考虑字节协议。

当然上面仅仅说明了http的部分协议,了解一下就行。

换行符协议

通俗的讲当遇到换行符,表示客户端发送消息结束,服务端处理消息,然后返回将消息以换行符结尾,返回客户端,客户端收到 消息,然后根据换行符截断消息,从而得到服务端具体发送数据。

过程如下:

client -> send -> 换行符(\n)结束的消息
server -> recv -> 收取2014字节的消息,查看消息中是否有换行符(\n),如果有,就认为已经收到了完整的消息,
如果没有,就继续接收 1024个消息,直到收到消息中有换行符,我们认为我们收完整的消息。
从换行符开始阶段之前的数据,就是客户端,发送的一条完整消息。

client伪代码实现:

data = "message\n"
client.start()
client.send(data)
server_msg = ""
while True:
    recv_msg = client -> recv(1024) 
    if "\n" in recv_msg:
        server_msg = recv_msg + server_msg
        break
print data        
client.close()

server伪代码实现:

server.start()
while True:
    recv_msg = server.recv(1024)
    server.send(recv_msg)

特殊字符分割协议

使用字符分割,一般统称为字符协议(非专业术语,个人随意编撰)。

当然你可以定义自己的字符协议,比如使用“---”或者“$$$”分割等。

假设有如下情况: * 发送的字符中本来就含有这些特殊字符,判断时候,就会导致消息不完整

例如分割符号为“---” ,发送的消息体中,也有“-----”,这个时候,程序就会报错。
  • 字符分割会发送无用的字符,占用空间影响效率(其实影响微乎其微)

  • 并不是所有发送的数据都是字符串,使用字符穿分割,可能出现很特殊的bug,比例传送图片或者视频数据

  • 非字符信息发送,需要二进制转换成字符信息,才能确定是否消息结束,当确认消息结束之后,需要再将字符消息转成二进制,保消息可以被解析。

对于上述的问题,就需要设计更加严谨的消息协议,应用余对应的场景。

二进制字符长度定义协议

我们有如下的需求:

发送端:

发送一个消息,我们会告诉接收端,这个消息多长,还有消息的类型。

接收端:

收取固定长度1014个字节的消息,当前消息长度在固定位置已经给出。在消息解析时候,按照发送过来的长度解析。

协议设计

消息长度(head) 消息数据(body)

*---------------- ---------

8                 body

*---------------- ---------

long long的最大值:9223372036854775807

long long的最小值:-9223372036854775808

设计概要

消息头部放置本次消息的长度,长度之后的字节表示消息体

具体设计

  • 首字符8位字节表示本次消息长度,最大的表示长度是9223372036854775807。
  • 消息体,应该不会有消息超过长度

具体代码实现服务端和客户端

服务端

客户端

客户端接收方式

  • 先接收8个字节的头,知道消息体长度
  • 接收消息体长度的数据。

ps: 同样你可以接收固定长度,然后拼接数据

一生时光匆匆

一生时光匆匆

北漂的时光,总是感觉自己的时间过的太快需要使用分钟计时。

很久没给家里打电话了。妈妈生日的那天,哥哥提醒我,今天妈妈生日给家里打个电话。 我才意识到,家里人的生日,我一个都记不住。

电话打过去,没人接听,再次打依旧没人接听。

刚刚哥哥问我,给家里打电话没有,我说没打通,然后才发现,我忘记保存妈妈最新的号码了。

电话过去,妈妈已经睡觉。

电话中,妈妈说话迷迷糊糊。才意识到,家里已经半夜了。农村的生活爸爸妈妈八点就睡觉拉。

电话中妈妈说“你哥哥和你嫂子打电话了,那天声音太杂,没听清,就说了两句挂了”

“你回来能不能把你的婚事定下来?”

“好像不能,这个事情我着急没用,慢慢来”

“还想着你十一能定下来,过年就可以准备结婚的事情了”

我小沉默一阵。

“你回家待几天?”

“我们放假八天,我可能在西安待两天,然后回家”

“我爸在家没有?”

“在家,你小姑被蜂蜇死了,你爸从西安回来了。昨天刚埋了。你哥哥嫂子打电话,那天你小姑家葬礼喪乐声音太大, 所以没怎么听清就说了两句就挂了”

我突然沉默,想起来被黑色大蜂蜇了的恐惧,小时候隔壁的发小,就是被蜇了三下,昏迷三天。

“隔壁那个王亮(发小),要结婚了。时间是在阴历八月十六,他爸过来让你爸帮忙,帮忙完了,才会出去干活”

“嗯”

“我小姑怎么被蜂折了,怎么这么严重?”

“去地里干活,地里有个蜂窝,之前就知道有蜂窝,她就没注意,不知道怎么的就碰到了,爬到马路上,村里人发现 赶紧找了他伯送县里医院,县里医院一看人不行了,就不敢收。还没到拉到市里医院,人就不在了”

接着我再度沉默,不知道要问什么。

小姑不到50岁,小姑家的大女儿,也刚刚工作,二女儿应该刚刚上初中。

想起来爸爸和小姑父,经常一起打工。

爸爸兄弟姐妹一共7人,一个叔叔前几矿山事故,在家瘫痪躺了两年,年去世了。现在小姑也去世了。 又少一人,少去了多少他们彼此的记忆。

人世间啊,一切都是匆匆而过。

认识了就记得抱紧彼此,微暖前行。

花火

花火

最近看了好几部北野武的电影。

《性爱狂想曲》 无厘头的脑洞大开,青春期的躁动,就和电影一样,虽然充满了,各种思维和场景的跳跃,但是从来没有离开荷尔蒙刺激。

《大佬》 日式黑社会,看的时候,体会到了自己当年看古惑仔一样的感觉,《大佬》 更多的表现了,视死如归 ,入了这条道,只有死亡才是马上可以到 来的永久归途。

《花火》 之前自己看《菊次郎的夏天》,简单写写自己的评价。好想吐 槽,自己当年写的东西也太短了。

什么是绝望

可能是无力回天,你知道即将到来的结果,你同样知道,自己无法做出任何可以改变结果的行为,只能安静的,绝望的,等待着那永久的绝望到 来,从而终结一切。

当然个人生活中,貌似没有什么痛彻心扉的绝望,唯一一次有点绝望的,仅仅是因为,两年前当时朋友借钱,我怀疑是去传销,但是我还是借钱 了。我转账完成那一刻,我知道,一切可能都结束了,我们之间的友谊。而后,确实按时还钱了。我开始为自己的错误判断自责,但是不信任开 始的那一刻,一切都在崩塌。

《花火》之中,北野武延续了大佬中的狠毒,暴力美学再次体现。

打空所有的子弹,因为自己的失误,导致同事中枪身亡,同事美满的家庭,在自己的手中,就这样荡然无存。

自己去看妻子,导致单独监控跟踪的搭档,中枪瘫痪。

妻子的绝症,已经剩下最后的日子,甚至于自己不知道自己要怎么面对。

在黑社会那边听说了。致富方式,最终拿到了巨款,踏上不归路。

给瘫痪的同事买了颜料,电影中看到了毕加索风格的画作,瘫痪的搭档重拾对生活的信心。

给牺牲的同事家属送了礼物。

归属

和妻子出去旅行,完成最后的旅行。

  • 自拍时候的意外
  • 放烟花时候的意外
  • 放风筝时候的意外

每个意外,自己都笑到半死,女主也笑到半死。

“谢谢你”,自己感觉是女主唯一的台词。

“谢谢你。伴我一生,不离不弃。。。。。。"

一句谢谢,真的耗尽了一生。

人生可能就是这样,选择自己的方式,和爱的人在一起。

写出自己的第一行python代码

写出自己的第一行python代码

在终端运行交互式python代码

打开写代码的软件开始菜单栏

选择anaconda prompt。可以打开如下图片:

输入python,然后回车

输入 print("hello world"),然后回车

我们写出了自己的第一行代码

print("hello world")

代码字面意思就是:打印“hello world”

在文件中编写python代码

既然写代码,我们就要使用更好的工具写代码,更好的工具,会遇到更少的问题。

notepad ++ 轻量级编码工具 下载链接

pycharm python编程神器 下载链接

建议使用pycharm,因为会有很多提示,避免我们写错代码。

下载完成pycharm,安装时候,傻瓜式安装,一直next到最后就行了。

在开始菜单栏打开pycharm

直接OK

创建你的低于第一python项目

打开之后出现默认项目名称

修改名称为hello,然后create创建项目

然后看到如下页面,点击close

选中hello文件夹,点击右键出现如下图,一直选中“python file”

创建代码文件,名字为“first”点击OK

在文件中写下如下代码:

print("hello world")

运行代码,右键,然后选中“run first”:

代码运行结果

两种方式运行代码到这里结束