python基础学习
晓东邪
扎实基础,记录学习点滴。
展开
-
使用python简单实现Kmeans
# -*- coding: utf-8 -*-# @Author: xiaodong# @Date : 2021/4/6import mathimport randomimport loggingfrom typing import Listlogger = logging.getLogger("kmeans")class KMeans: def __init__(self, dataset: List[float], k: int, iteration: int =原创 2021-04-06 11:44:11 · 505 阅读 · 0 评论 -
python解析java properties配置
def parse(template): head = {} for line in template.split("\n"): if line.strip().startswith("#"): continue if not line.strip(): continue keys, value = line.split("=", maxsplit=1) keys, value =原创 2020-11-09 19:03:56 · 524 阅读 · 0 评论 -
python 删除非空文件夹
一般删除文件时使用os库,然后利用os.remove(path)即可完成删除,如果删除空文件夹则可使用os.removedirs(path)即可, 但是如果需要删除整个文件夹,且文件夹非空时使用os.removedirs(path)就会报错了,此时可以使用shutil库,该库为python内置库,是一个对文件及文件夹高级操作的库,可以与os库互补完成一些操作,如文件夹的整体复制,移动文件夹,对文件原创 2017-08-14 10:22:02 · 84963 阅读 · 1 评论 -
Python 库之heapq
堆是一种特殊的树形数据结构,每个节点都有一个值 。堆的特点是根节点的值最大(或者最小),而且根节点的两个孩子也能与孩子节点组成子树。heapq是python内置的堆排序。常用方法有:heapify #以线性时间将序列转换为堆heappush #将value 压到堆中heappop #将最小(最大,默认为最小)值弹出heappushpop #将给定v原创 2017-08-14 11:42:17 · 6653 阅读 · 0 评论 -
json 一些妙用
JSON(JavaScript Object Notation) python中内置库为json。In [399]: d = dict(name='Tom', age=20, sex='male', tall=185)In [400]: dOut[400]: {'age': 20, 'name': 'Tom', 'sex': 'male', 'tall': 185}In [401]: impor原创 2017-08-14 14:19:52 · 454 阅读 · 0 评论 -
通过字符串调用对象属性或方法
有时候需要将属性或方法作为参数传入,这个时候可以通过以下几种方式用字符串调用对象属性或方法1、evalIn [634]: def getmethod(x,char='just for test'): ...: return eval('str.%s' % x)(char) ...: In [635]: getmethod('upper')Out[635]: 'JUST原创 2017-08-15 17:45:27 · 14248 阅读 · 0 评论 -
Python中内置异常层次结构
BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception +-- StopIteration +-- StandardError | +-- BufferError | +-- ArithmeticError |原创 2017-03-07 20:55:44 · 1632 阅读 · 0 评论 -
Python 描述符代码示例
动态检查格式,可通过描述符的形式实现。class Typed: def __init__(self, name, expected_type): self.name = name self.expected_type = expected_type def __get__(self, instance, cls): if instance原创 2017-08-23 15:38:49 · 2772 阅读 · 0 评论 -
解除装饰器作用(python3新增)
一个装饰器已经作用在一个函数上,你想撤销它,直接访问原始的未包装的那个函数。假设装饰器是通过 @wraps 来实现的,那么你可以通过访问 wrapped 属性来访问原始函数:>>> @somedecorator>>> def add(x, y):... return x + y...>>> orig_add = add.__wrapped__>>> orig_add(3, 4)7原创 2017-08-24 15:26:21 · 5949 阅读 · 2 评论 -
将一组排序后的序列进行合并后顺序迭代
你有一系列排序序列,想将它们合并后得到一个排序序列并在上面迭代遍历。In [134]: import heapqIn [135]: a = [1, 4, 7, 10]In [136]: b = [2, 5, 6, 11]In [137]: for c in heapq.merge(a, b): ...: print (c) ...: 12456710原创 2017-08-12 18:02:56 · 1634 阅读 · 0 评论 -
python中运算过程中小数精度的控制
用python进行运算时,如果会出现浮点数,有时候会需要对小数精度进行控制,主要方法有以下几种:1、round()round()是python的内置方法, round()如果只有一个数作为参数,不指定位数的时候,返回的是一个整数,而且是最靠近的偶数整数(python2.7版本则是四舍五入,这个针对的是python3版本)。如果有两个参数则最多保留精度为第二个参数大小。In [1]: 4 - 3.6原创 2017-02-08 22:06:04 · 25881 阅读 · 1 评论 -
python的faker库
首先需要:pip install fakerIn [530]: import fakerIn [531]: init = faker.Faker(locale='zh-cn')In [532]: init.name()Out[532]: '诸明'In [533]: L = []In [534]: for i in range(100): ...: name = init.last原创 2017-08-10 17:41:49 · 7204 阅读 · 0 评论 -
Python 内建函数和保留字
保留字:In [4]: import keywordIn [5]: keyword.kwlistOut[5]: ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally',原创 2017-08-17 17:32:36 · 24587 阅读 · 0 评论 -
python取数作为临时极大值(极小值)
编程中有时候需要一个初始极大值(或极小值)作为temp,当然可以自定义设置为10000(whatever),不过python中有一个值可以代替之:在python2.7中可以用这个(不过python3版本就没得了)>>> import sys>>> sys.maxint2147483647还可以利用numpy库(这个python3也可以使用,当然先确认安装了numpy)>>> import num原创 2017-08-10 10:13:38 · 12318 阅读 · 0 评论 -
python查找指定文件夹下所有文件并按修改时间倒序排列
代码如下:import os, glob, timedef search_all_files_return_by_time_reversed(path, reverse=True): return sorted(glob.glob(os.path.join(path, '*')), key=lambda x: time.strftime("%Y-%m-%d %H:%M:%S", time.l原创 2017-08-09 14:45:45 · 6802 阅读 · 0 评论 -
2的(幂)n次方实现方式比较
发现<< 居然比** 还要快那么点点,记录之~In [613]: %timeit 1 << 10The slowest run took 78.83 times longer than the fastest. This could mean that an intermediate result is being cached.100000000 loops, best of 3: 19.5原创 2017-08-01 15:59:52 · 6223 阅读 · 0 评论 -
几种将存储为str的其他类型转换回去的方法
有时候需要将数据存储为txt文件,但是再次读取时由于转换为了str类型所以需要重新转换回来,转换方式可以用以下几种:import jsonfrom ast import literal_evalIn [11]: test_list = '[1,2,3,4]'In [12]: test_dict = "{'a': 1, 'b': 2}"#方法1, 使用evalIn [13]: trans_lis原创 2017-07-21 16:40:08 · 771 阅读 · 0 评论 -
python检测空间储存剩余大小和指定文件夹内存占用
1、检测指定路径下所有文件所占用内存import osdef check_memory(path, style='M'): i = 0 for dirpath, dirname, filename in os.walk(path): for ii in filename: i += os.path.getsize(os.path.join(di原创 2017-07-06 14:35:42 · 8723 阅读 · 0 评论 -
python 库收藏
环境管理管理Python版本和环境的工具。p–非常简单的交互式python版本管理工具。pyenv–简单的Python版本管理工具。Vex–可以在虚拟环境中执行命令。virtualenv–创建独立Python环境的工具。virtualenvwrapper-virtualenv的一组扩展。包管理管理包和依赖的工具。pip–Python包和依赖关系管理工具。pip-tools–保证Python包依赖关原创 2017-07-04 19:45:30 · 2090 阅读 · 0 评论 -
defaultdict的妙用
python中的内置库collections中有个defaultdict,这个具体的用法就不说了,资料很多,确实好用。 但是想在嵌套的dict中使用defaultdict就比较麻烦了,正好在网上看到一个相关的, 使用递归解决了这个问题,非常的妙:from collections import defaultdictdef tree(): return defaultdict(tree)使用原创 2017-05-06 11:20:52 · 1863 阅读 · 0 评论 -
实现深度优先方式遍历树
以深度优先方式遍历树形节点的生成器。class Node: def __init__(self, value): self._value = value self._children = [] def __repr__(self): return 'Node({!r})'.format(self._value) def add_ch原创 2017-09-21 22:29:52 · 3362 阅读 · 0 评论 -
Python 比较文本相似性(difflib,Levenshtein)
最近工作需要用到序列匹配,检测相似性,不过有点复杂的是输入长度是不固定的,举例为:input_and_output = [1, 2, '你好', 世界', 12.34, 45.6, -21, '中国', '美丽']其中,需要从input_and_output 中选取不固定长度的一段作为输入,且顺序不定,然后去与总体进行比较,找出最符合的,开始是对汉字进行数值化编码,不过后来由于出现汉字越来越多,遂放原创 2017-10-13 00:07:15 · 12351 阅读 · 3 评论 -
面向对象原则
面向对象的SOLID原则缩写全称释义SThe Single Responsibility Principle单一职责原则OThe Open Closed Principle开放封闭原则LLiskov Substitution Principle里氏替换原则IThe Interface Segregation Principle接口分离原则...原创 2019-06-16 11:04:45 · 171 阅读 · 0 评论 -
python 使用format的一个小问题
之前遇到一个场景,具体是需要使用python 操作mysql 数据库, 大概需要这种操作:In [96]: '{%s!r}' % 'test'Out[96]: '{test!r}'如果不使用% 进行格式化操作,而是使用format,在这里貌似会有点问题, 如果通过format 完成与上述代码相同的结果呢???#报错In [98]: '{{}!r}'.format('test...原创 2018-05-09 17:41:14 · 12243 阅读 · 1 评论 -
python美化输出信息
这个repo 用来记录一些python技巧、书籍、学习链接等,欢迎stargithub地址# -*- coding: utf-8 -*-# @Author: xiaodong# @Date: just hide# @Last Modified by: xiaodong# @Last Modified time: just hide# try:# from...原创 2018-04-12 18:38:25 · 2068 阅读 · 0 评论 -
使用Python监视指定目录下文件变更
这个repo 用来记录一些python技巧、书籍、学习链接等,欢迎stargithub地址监视指定目录下文件变更。# -*- coding: utf-8 -*-# @Author: xiaodong# @Date: just hide# @Last Modified by: xiaodong# @Last Modified time: just hideimp...原创 2018-04-03 17:50:19 · 2778 阅读 · 0 评论 -
从dict中一次性取出指定一组key对应的value
这个repo 用来记录一些python技巧、书籍、学习链接等,欢迎stargithub地址有时候我们需要从dict (或者json)中取出指定key值对应的value ,当然可以逐个去取,那么,可不可以一次性取呢,回答当然是Yes, 如下:# 随意构造一个dictIn [102]: from string import ascii_lowercase, ascii_upperca...原创 2018-03-20 14:41:12 · 14296 阅读 · 0 评论 -
使用python去除HTML中标签的几种方式
这个repo 用来记录一些python技巧、书籍、学习链接等,欢迎stargithub地址待删除HTML示例标签如下:In [96]: testOut[96]: '<p>just for test</p><br/><font>just for test</font><b>test</b>'方法原创 2018-03-08 17:53:48 · 24908 阅读 · 1 评论 -
string 中的maketrans和translate
maketrans 和 translate 是 Python 内置的 string 包中的两个类似于密码本的方法,一般来说,使用 translate 前需要先制作一个 maketrans 的 “密码本”(table)。# ---------------------此处有误-----------------------------------#仅支持python2,python3废弃了该方...原创 2018-02-08 11:47:45 · 12155 阅读 · 1 评论 -
使用numba对Python运算加速
有时候需要比较大的计算量,这个时候Python的效率就很让人捉急了,此时可以考虑使用numba 进行加速,效果提升明显~ (numba 安装貌似很是繁琐,建议安装Anaconda,里面自带安装好各种常用科学计算库)from numba import jit@jitdef t(count=1000): total = 0 for i in range(int(count)原创 2018-01-27 14:16:45 · 3363 阅读 · 1 评论 -
json.load 与 pandas.read_csv 效率对比
工作需要将读入文件时间降低,之前采用的是读取csv文件,使用的Pandas,数据条数大概有130余万条,大概要耗时2-3s,速度有点慢,看是否能通过转换为json数据后用json.load 来代替, 具体对比如下: 可以看到使用pandas.read_csv 耗时不到json.load 的三分之一,看来这条路走不通~原创 2018-01-24 16:01:20 · 2804 阅读 · 2 评论 -
安装python库时windows error5 报错解决方案
python安装库时,有时候会报错windows error 5,查了一下,此时将报错最下层文件删除即可,记录之~windows error错误代码:windows error错误代码:0操作成功完成。1功能错误。2系统找不到指定的文件。3系统找不到指定的路径。4系统无法打开文件。5拒绝访问。6句柄无效。7存储控制块被损坏。8存储空间不足,无法处理此命令。9存储控制块地址无效。1原创 2017-05-25 11:31:37 · 5952 阅读 · 0 评论 -
Python中最大最小赋值小技巧
码代码时,有时候需要根据比较大小分别赋值:import randomseq = [random.randint(0, 1000) for _ in range(100)]#方法1:xmax, xmin = max(seq), min(seq)#方法2:xmax, *_, xmin = sorted(seq)从上面这个来看,看不出来方法2的优势来,不过我们常用的是比较两个数的大小,并选取:dx原创 2017-12-07 14:57:26 · 4725 阅读 · 0 评论 -
简易统计Python有效代码行数
有的时候看源码或者py文件时,想知道有效代码行数是多少,即除了注释外的所有行数,比如requests源码中,sessions.py文件,带注释共有712行(不知道有没有更新。。。),去除注释后统计行数为326行,你看,这一下子就少了一半多,看源码是不是更有动力了。。。以下为我的实现代码,聊作参考~# -*- coding: utf-8 -*-# @Author: xiaodong# @Date:原创 2017-12-18 19:20:11 · 4070 阅读 · 0 评论 -
Python 模块之os
最近在学习python多线程,发现有时候会用到os模块,虽然之前也稍有了解,但是既然os模块应用范围这么广,就正好顺势深入学习下。python中os模块包含普遍的操作系统功能,如果希望python程序能够跨平台运行,os模块至关重要。import os #导入os模块os模块常用方法: 1、os.name 输出字符串指示正在使用的平台。如果是windows 则用’nt’表示,对于Linux/Un原创 2016-06-18 23:26:31 · 3777 阅读 · 0 评论 -
Python 中字符串内建函数的一些使用注意事项
如君所知,capitalize()可将字符串首字母转为大写, 同时,可能有些小白像我一样并不知道同时capitalize()会将余下的字符串中的大写字母(若果有的话)自动转为小写。例如:>>> 'lxd I love you!'.capitalize()#注意"I"会被转为小写'Lxd i love you!'>>> 'lxd I love you! You know ,you are so h原创 2016-04-14 19:38:09 · 611 阅读 · 0 评论 -
Python 中enumerate的使用
在索引迭代序列中我们可以通过range()和len()函数遍历序列中的元素以及元素的下标:>>> a = ['Mary','had','a','littel','lamb']>>> for i in range(len(a)): print(i,a[i])0 Mary1 had2 a3 littel4 lamb然而大部分情况下我们可以使用enumerate函数进行相同的操原创 2016-04-13 22:30:43 · 1306 阅读 · 2 评论 -
便捷提取python导入包的属性
很多时候我们都需要了解下python中导入包的属性方法信息,当然dir 是最便捷的了,不过如果想知道特定的,例如以_ 开头的属性,需要写个筛选,以下是实现筛选的两种方式,主要是练习下yield from 的使用,可以聊作参考~#法1def e(start='_', module='os'): module = __import__(module) def gen_attr():原创 2017-11-16 15:02:03 · 730 阅读 · 0 评论 -
通过协程统计函数被调用次数(附python代码简单实现)
有的时候我们想统计下某个py文件内所有函数(或指定某些函数)的调用次数,可以通过协程的方式实现,当然也可以写在一个类里,但有的时候不想封装成类可以考虑下协程。 (我记得之前工作某次就想统计函数被调用次数,但当时没想到合适的解决方案,遂放弃。。。)例子如下:#被调用py文件代码#假设文件名为cor.pyfrom functools import wraps'''通过协程实现记录所有函数被调用次原创 2017-11-17 22:21:33 · 6277 阅读 · 0 评论 -
Python 中的一些坑
1、链式比较False == False == TrueOut[1]: False如上,一般看到这个表达式总觉得应该返回 : True ,因为会理解为:(False==False) & True ,因为对于赋值表达式,即 = 右边一般理解为从左到右执行,但是,这个是个是要从 python 的‘比较表达式’ 来对比, 即 :1 < 2 < 3Out[2]...原创 2017-07-03 17:44:10 · 543 阅读 · 0 评论