with语句
在工作当中写代码的时候遇到当需要使用python打开文件的时候,程序会提示你使用with语句而是不是open+close,以前自己都未曾关心为啥,这样做有什么优势,现在越发好奇了。 With语句是什么?最常见的解释就是说当年你需要打开一个文件的时候,如果只是打开不关闭是危险或者不规范的操作,所以必须要有打开也要有关闭,如下代码: 123file = open("test.txt")data = file.read()file.close() 但是这里有两个问题: 一是可能忘记关闭文件句柄; 二是文件读取数据发生异常,没有进行任何处理。 所以为了安全起见推荐有以下改进方法: 12345file = open("test.txt")try: data = file.read()finally: file.close() 虽然更加安全,但是冗长以及理解更困难的问题也随之出现了。而with语法正好可以解决这个问题: 12with open("/tmp/foo.txt") as file: data ...
行尾序列是个啥?
在使用vscode开发的时候,我一直很疑惑右下角的一个选择行尾序列的按钮,这东西到底什么用?为啥点击之后感觉也没啥变化?但是碍于我很懒,只想摆烂,所以一直没有去关心这个。但是好奇心终究还是挡不住,我还是打算将其搞个明白。 究竟是啥?简单来说就是当我们需要写一段文本的时候如果需要换行,在Linux与windows下面是不同的,虽然我们同样看到的是换行的样式,但是实际被记录的是两种。 Linux下创建的LinuxFIle文件,用Linux的编辑器在里面写上文本。然后用Python显示出转义符,可以看到换行符是\n,这里的\n就是指的是换行符(LF)。 Windows下创建的文件,同样的处理方式,换行符是\r\n,\r指的就是回车(CR),\r\n连起来就是回车换行(CRLF)。 总结来说就是:在Linux里编辑文件,一行结束后跟的是\n;在Windows里用自带的记事本编辑文件,一行结束后跟的是\r\n CR和LFCR和LF是缩写,其实他们的全称分别是:Carriage-Return和Line-Feed。追本溯源的说,CR(Carriage-Return)和LF(Line-Fe...
python的logging库记录
问题在最近的工作当中,需要使用到python的一个常见库叫做logging,这个库可以用于项目的日志记录,但是在我使用的过程当中却需要多个log对象分别输出到不同的日志文件当中的时候,我使用以下代码失败了: 1234567891011121314151617181920import logginglogging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='test.log', filemode='w')log = logginglog.debug('debug message...
python的坑记录
在阅读别人博客的时候看到别人记录了一个python的坑,我觉得可能是一个今后会发生的一个错误,因此记录下来。直接上代码: 1234567def f(a, L=[]): L.append(a) return Lprint(f(1))print(f(2))print(f(3)) 打印出来的结果是: 123[1][1, 2][1, 2, 3] 这是因为, 作为默认参数, python在启动时就会将变量 L 建立, 我们在函数 f 内对 L 处理就会导致后来调用的 L 已经是修改过的 L 了, 我们可以通过打印 L 的内存地址来验证 123456789def f(a, L=[]): print(id(L)) L.append(a) print(id(L)) return Lprint(f(1))print(f(2))print(f(3)) 结果是 12345678945132896004513289600[1]45132896004513289600[1, 2]45132896004513289600[1, 2, 3] 简单来说,被声明的默认...
分类
常见的机器学习分类有,支持向量机、决策树、KNN、朴素贝叶斯,以前在学习机器学习的时候就简单学过,现在需要用在图像分类上了。一时间蒙了,忘记怎么图像转以前的数据了,现在在GitHub上找到一个不错的例子,特此记录一下。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126import osimport cv2import numpy as npfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import ...
小心螃蟹
很多人都有一个常识:当我们往一个不高的容器中放进一只螃蟹时,它总会努力想尽办法逃出来。但如果放进去的是很多只螃蟹时,结果通常就是你拉我,我拽他,叠罗汉,最终谁也出不来。而在螃蟹群体中出现的这个特殊现象,竟然在人类群体中也同样适用。 这种现象我们称之为 Crab Mentality 螃蟹心理,那么螃蟹心理到底是怎么回事呢?把螃蟹放在桶里的时候,他们不会帮助对方逃脱。实际上,螃蟹群会阻止任何想单独逃脱的螃蟹。当一只螃蟹爬到桶的顶部时,其他的螃蟹会把他拽回来。这好像在说:“如果我要死了,那你也要一起死。”尽管螃蟹是否真的会这么做还有待探讨。但这种思维方式被称为“螃蟹心理”。它同时也可以应用到我们在生活中的表现。 比如,有一天,在一群不太关心学习的人中,有一个人决定要拿个好成绩。这个小组的其他成员不仅不会支持她,反而会嘲笑她,或者试图分散她在学习上的注意力。他们并不希望她成功,宁愿让她陷在跟他们一样的处境中。就好像在说,“如果我不能得到这个,那你也不能。” 这些人的心理就叫做“螃蟹心理”。
Gin框架数据渲染
json渲染 12345678910111213141516171819202122func main() { r := gin.Default() // gin.H 是map[string]interface{}的缩写 r.GET("/someJSON", func(c *gin.Context) { // 方式一:自己拼接JSON c.JSON(http.StatusOK, gin.H{"message": "Hello world!"}) }) r.GET("/moreJSON", func(c *gin.Context) { // 方法二:使用结构体 var msg struct { Name string `json:"user"` Message string Age int } msg.Name = "小王子" ...
go语言简单web
vscode 插件安装由于我个人使用的是vscode进行的操作,所以需要安装一下相应的插件,在插件安装好之后会自动提示安装依赖,国内源不大行,需要进行以下操作。 12go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.cn 不一定即刻生效,如果失败可以考虑重启。 基础go语言与其他语言一样,可以实现原生的web服务,代码如下: 123456789101112131415161718192021package mainimport ( "fmt" "net/http")// http.ResponseWriter:代表响应,传递到前端的// *http.Request:表示请求,从前端传递过来的func sayHello(w http.ResponseWriter, r *http.Request) { _, _ = fmt.Fprintln(w, "hello world!");}func main() { http.Hand...
python连接远程服务器
python连接远程服务器有很多实现方法,但是在我使用的时候却要要求做成服务的形式,连接信息用后端返回的形式。实现方式: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091import paramikoimport timefrom apscheduler.schedulers.background import BackgroundSchedulerclass ssh_tunnel(object): def survival_detection(self): interval_time = int(time.time()) - self.start_time if interval_time > 10800: # No operation for...
opencv识别颜色与线段
在使用opencv的过程中,实际情况常常需要对线段、圆形、颜色等条件的判断,但是网上多给出一些图像处理的数据,没有给出我需要的判定结果。在尝试后记录了两端代码供之后使用 对于线段的判断输出结果为线段长度 1234567891011121314151617img = cv2.imread("data/img/file.jpeg")img=img[0:int(img.shape[0]*0.9),0:int(img.shape[1]*0.9)]gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)edges = cv2.Canny(gray, 50, 150, apertureSize=3)lines = cv2.HoughLinesP(edges,1,np.pi/360,100,minLineLength=int(img.shape[1]*0.7),maxLineGap=10)def draw_line(img,lines): # 绘制直线 for line_points in lines: lenth ...














