是时候学习python了
是时候学习python了
01
为什么学Python
一直有听说Python神奇,总是想学,虽然不知道为啥。奈何每天写bug,修bug忙得不亦乐乎,总是不得闲。直到有一次与汤哥聊一个数据修复方案时,我只能说出用excel,而领导却说用Python可以非常方便时,我知道是时候学习Python了。于是有了这篇短文。
02
Hello World
有一个关注程序员的笑话:程序员退休后,学写毛笔字,身体端坐,铺好宣纸,墨入砚台,毛笔蘸墨,突然不知如何下笔,苦思良久,写了二字:hello world 。这看似滑稽,确也道出我们程序员是真真的实干派。接下来我们按学习新技能 的标准SOP: code 三部曲 -- 环境,文档, hello world 开始我的文章。
运行环境百度一下,你就知道了。如果是mac,使用推荐使用 homebrew ,一条命令搞定(如果提示 upgrading ... 直接ctrl+c 就开始安装了),输入python3 / python 看到如下结果就表示 ready了(我的电脑上安装了两个版本)。
到这里本来已经可以开始使用vi码代码了,看着还very cool,但发现自己过了那个年纪,idea 装个pyhon 插件十分实用,如下图。智能提示,快速运行,查看结果,实用才香。
开发环境准备就绪,接下来推荐一个入门文档:https://www.liaoxuefeng.com/wiki/1016959663602400, 廖雪峰出品,真心不错。2分钟就可以写出第一个HelloWorld。程序写完了,但他几乎没有任何意义,因为他不能为我们解决问题。
!/usr/bin/env python3
print("Hello H和J的博客")
输出
/usr/local/bin/python3.7 /Users/jijunjian/learn/mypython/src/HelloWorld.py
Hello H和J的博客
要了解一门语言,一些基础内容还是要了解下,如果你有一门语言基础的话,几乎可以立马上手,python是一门高级语言。建议了解下数据类型和变量,字符串和编码,使用list和tuple ,使用dict和set。这些是python的基本数据类型,几乎每个程序都会用到。其他就是条件判断,循环,函数等...然而...
03
学以致用
学了2周,新鲜感消失了,想放弃了,但是心中又无法面对花去的时间,直到学习结构化思维提到:知识往问题靠,问题往知识靠,不断补充知识体系。有了这样的意识问题就来了。
问题:运营反馈某地投放了200个单车,但是监控地图只能看到150辆,要找出缺少的50辆分析原因。
背景:系统中以单车编号为key 存放在redis里,而运维提供的web工具一次只能查一个key。
解决:一个个查,重复200次也能解决问题,但是太麻烦。做为程序员,我们首要做的就是:do not repeat yourself。既然问题要往知识靠,那我刚学的python是否可以快速搞定呢:运维提供的web工具其实就是发起一个http请求,解析返回的json,这些对于python来就就是几行代码的事儿,于是代码就写了好了。真的比重复200次又快,又准。这样的经历比单纯的学习深刻许多。
!/usr/bin/env python3
import requests
import json
单车列表
dataList = [
'hget mapBike:单车编号1 city', 'hget mapBike:单车编号2 city'
]
host = "运维工具地址"
headers = \
{ "method":"POST", "path":"/execute", "token":"我的token", "user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" }
index = 0;
errorCount = 0;
for i in dataList:
index +=1 body = \ { "redisName": "redis-cluster", "command": i } r = requests.post(host,headers=headers,data=json.dumps(body)) data2 = json.loads(r.text) print("index=%s" % index) if data2["data"] != '城市编号': print("error:%s" % i) errorCount += 1;
print("一共:%s" % index)
print("error:%s" % errorCount)
有了这次经历,又燃起了学习热情。map/reduce概念是一个有意思的东西,建议大家一定要学习。看大数据书籍里会多次提到。话分两头,又来了一个问题。
问题:新版单车投放功能有一个缺陷,导致已经投放的数万个单车某个属性错误,要按单车编号修正数量。
背景:投放时单车信息保存在了日志表的扩展信息中,dba只能导出格式如下,其他信息已经删除。整个文件30M, 想使用多行编辑,删除多余再使用excel公式生成sql, 想法很好,就是编辑时卡顿...谁用谁我知道
{"bikeNo":"abc123dba1"} 2020-03-07 20:43:31.64747
{"bikeNo":"abc123dba2"} 2020-03-07 20:43:31.64747
{"bikeNo":"abc123dba3"} 2020-03-07 20:43:31.64747
{"bikeNo":"abc123dba4"} 2020-03-07 20:43:31.64747
{"bikeNo":"abc123dba5"} 2020-03-07 20:43:31.64747
解决:这次没思考直接就想到Python了,想法很简单:
1,按行读取,找到最后个“}”,拆分成两个字符串。第二个为时间
2,解析json得到单车编号,
3,拼接bikeNo,与时间生成sql。输出到文件。
想到这里代码也写好了,就是这么快。关键还不会出错。
!/usr/bin/env python3
import json
读数据文件
with open('/Users/jijunjian/Downloads/daa.sql', 'r') as f1:
list1 = f1.readlines() print(len(list1))
最终输出文件
with open('/Users/jijunjian/Downloads/test.txt', 'w') as f:
for i in range(0, len(list1)): list1[i] = list1[i].strip('\n') index = list1[i].rindex('}'); ctime = list1[i][index+1:].strip() jsonString = list1[i][0:index+1] jsonx = json.loads(jsonString) # 可以拼接成 update 语句 f.write(jsonx["assertNo"]+";"+ctime+" "+"\n") print(i)
04
结语
后来与汤哥聊到Python的话题,我们学习Python并不是想成为这个领域的专家,而是当来一个工具来使用。对我而言,这样的程度就够了,能快速解决问题,提供多一个思路。便不在纠结还要学多少了,以后有需求再补充知识体系就可以了。从美菜到哈啰的最近一年多看了10来本书,一直觉得没啥收获,就是没想明白为什么要学。箭靶都没有,只练习拉弓不会有多少提高。
上面的这些问题不一定非要用python去解决,js,java都能实现,也许还更多快。既然学了Python,权当练手了。如何学以致用 -- 知识往问题靠,问题往知识靠
版权声明:
作者:J²
编辑:妞妞
原文地址https://www.cnblogs.com/jijunjian/p/12801513.html

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
python实现线性回归之简单回归
python实现线性回归之简单回归 代码来源:https://github.com/eriklindernoren/ML-From-Scratch 首先定义一个基本的回归类,作为各种回归方法的基类: class Regression(object): """ Base regression model. Models the relationship between a scalar dependent variable y and the independent variables X. Parameters: ----------- n_iterations: float The number of training iterations the algorithm will tune the weights for. learning_rate: float The step length that will be used when updating the weights. """ def __init__(self, n_iterations, learning_rate)...
- 下一篇
JVM致命错误日志详解
JVM致命错误日志详解 目录文件描述文件位置文件头错误信息记录JVM运行信息崩溃原因错误信息线程描述线程信息信号信息计数器信息机器指令内存映射信息线程堆栈其他信息进程描述线程列表虚拟机状态互斥锁/管程堆概览卡表和本地代码缓存编译事件GC事件逆向优化事件内部错误事件内存信息虚拟机参数和环境变量信号处理器系统信息操作系统内存信息CPU信息总结最近一段时间生产环境频繁出问题,每次都会生成一个hs_err_pid*.log文件,因为工作内容的原因,之前并没有了解过相关内容,趁此机会学习下,根据项目的使用情况,此文章针对JDK 8进行分析,不过因为素材问题,文章中引用的文件内容为JDK 7生成的文件,此处应该不影响,因为官方文档中关于此部分说明使用的是JDK 6生成的文件。我们将按照内容在文件中出现的顺序进行介绍。 PS:本人水平有限,工作中也没有太多机会进行此类知识的应用,文章内容绝大多数来自于官方文档,某些内容在官网中并没有涉及,相应的介绍不一定准确,希望各位大佬不吝赐教 JDK 8官方文档下载地址:https://www.oracle.com/java/technologies/javas...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS关闭SELinux安全模块
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,8上快速安装Gitea,搭建Git服务器