首页
关于
Search
1
怎么快速从GitHub上下载代码
48 阅读
2
GitHub下载加速的有效方法
39 阅读
3
Python中的center()是怎么用的
35 阅读
4
如何在GitHub上下载旧版本
34 阅读
5
怎样删除GitHub存储库
32 阅读
Python
Github
IDC推荐
登录
Search
Xbe
累计撰写
242
篇文章
累计收到
1
条评论
首页
栏目
Python
Github
IDC推荐
页面
关于
搜索到
76
篇与
的结果
2025-03-06
Python中SQLite的简单应用
SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。在使用SQLite前,我们先要搞清楚几个概念:表是数据库中存放关系数据的集合,一个数据库里面通常都包含多个表,比如学生的表,班级的表,学校的表,等等。表和表之间通过外键关联。要操作关系数据库,首先需要连接到数据库,一个数据库连接称为Connection;连接到数据库后,需要打开游标,称之为Cursor,通过Cursor执行SQL语句,然后,获得执行结果。Python定义了一套操作数据库的API接口,任何数据库要连接到Python,只需要提供符合Python标准的数据库驱动即可。由于SQLite的驱动内置在Python标准库中,所以我们可以直接来操作SQLite数据库。我们在Python交互式命令行实践一下:# 导入SQLite驱动: >>> import sqlite3 # 连接到SQLite数据库 # 数据库文件是test.db # 如果文件不存在,会自动在当前目录创建: >>> conn = sqlite3.connect('test.db') # 创建一个Cursor: >>> cursor = conn.cursor() # 执行一条SQL语句,创建user表: >>> cursor.execute('create table user (id varchar(20) primary key, name varchar(20))') <sqlite3.cursor object="" at="" 0x10f8aa260=""> # 继续执行一条SQL语句,插入一条记录: >>> cursor.execute('insert into user (id, name) values (\'1\', \'Michael\')') <sqlite3.cursor object="" at="" 0x10f8aa260=""> # 通过rowcount获得插入的行数: >>> cursor.rowcount 1 # 关闭Cursor: >>> cursor.close() # 提交事务: >>> conn.commit() # 关闭Connection: >>> conn.close() </sqlite3.cursor></sqlite3.cursor>我们再试试查询记录:>>> conn = sqlite3.connect('test.db') >>> cursor = conn.cursor() # 执行查询语句: >>> cursor.execute('select * from user where id=?', '1') <sqlite3.cursor object="" at="" 0x10f8aa340=""> # 获得查询结果集: >>> values = cursor.fetchall() >>> values [(u'1', u'Michael')] >>> cursor.close() >>> conn.close() </sqlite3.cursor>使用Python的DB-API时,只要搞清楚Connection和Cursor对象,打开后一定记得关闭,就可以放心地使用。使用Cursor对象执行insert,update,delete语句时,执行结果由rowcount返回影响的行数,就可以拿到执行结果。使用Cursor对象执行select语句时,通过featchall()可以拿到结果集。结果集是一个list,每个元素都是一个tuple,对应一行记录。如果SQL语句带有参数,那么需要把参数按照位置传递给execute()方法,有几个?占位符就必须对应几个参数,例如:cursor.execute('select * from user where id=?', '1')SQLite支持常见的标准SQL语句以及几种常见的数据类型。具体文档请参阅SQLite官方网站。小结在Python中操作数据库时,要先导入数据库对应的驱动,然后,通过Connection对象和Cursor对象操作数据。要确保打开的Connection对象和Cursor对象都正确地被关闭,否则,资源就会泄露。如何才能确保出错的情况下也关闭掉Connection对象和Cursor对象呢?请回忆try:...except:...finally:...的用法。
2025年03月06日
3 阅读
0 评论
0 点赞
2025-03-06
Python中的socket网络通信
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。这个实例讲述了python使用socket进行简单网络连接的方法:import socket print "Creating socket...", s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print "done." print "Connecting to www.bitsCN.com", s.connect(("www.bitsCN.com", 80)) print "done."上面的代码返回下面的结果:Creating socket... done. Connecting to www.bitsCN.com done.
2025年03月06日
4 阅读
0 评论
0 点赞
2025-03-04
举例详解Python中的内建模块collections
collections是Python内建的一个集合模块,提供了许多有用的集合类。这里举几个例子:namedtuple我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成:>>> p = (1, 2)但是,看到(1, 2),很难看出这个tuple是用来表示一个坐标的。定义一个class又小题大做了,这时,namedtuple就派上了用场:>>> from collections import namedtuple >>> Point = namedtuple('Point', ['x', 'y']) >>> p = Point(1, 2) >>> p.x 1 >>> p.y 2namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。这样一来,我们用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便。可以验证创建的Point对象是tuple的一种子类:>>> isinstance(p, Point) True >>> isinstance(p, tuple) True类似的,如果要用坐标和半径表示一个圆,也可以用namedtuple定义:# namedtuple('名称', [属性list]): Circle = namedtuple('Circle', ['x', 'y', 'r'])deque使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:>>> from collections import deque >>> q = deque(['a', 'b', 'c']) >>> q.append('x') >>> q.appendleft('y') >>> q deque(['y', 'a', 'b', 'c', 'x'])deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。defaultdict使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict:>>> from collections import defaultdict >>> dd = defaultdict(lambda: 'N/A') >>> dd['key1'] = 'abc' >>> dd['key1'] # key1存在 'abc' >>> dd['key2'] # key2不存在,返回默认值 'N/A'注意默认值是调用函数返回的,而函数在创建defaultdict对象时传入。除了在Key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。OrderedDict使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。如果要保持Key的顺序,可以用OrderedDict:>>> from collections import OrderedDict >>> d = dict([('a', 1), ('b', 2), ('c', 3)]) >>> d # dict的Key是无序的 {'a': 1, 'c': 3, 'b': 2} >>> od = OrderedDict([('a', 1), ('b', 2), ('c', 3)]) >>> od # OrderedDict的Key是有序的 OrderedDict([('a', 1), ('b', 2), ('c', 3)])注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:>>> od = OrderedDict() >>> od['z'] = 1 >>> od['y'] = 2 >>> od['x'] = 3 >>> od.keys() # 按照插入的Key的顺序返回 ['z', 'y', 'x']OrderedDict可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key:from collections import OrderedDict class LastUpdatedOrderedDict(OrderedDict): def __init__(self, capacity): super(LastUpdatedOrderedDict, self).__init__() self._capacity = capacity def __setitem__(self, key, value): containsKey = 1 if key in self else 0 if len(self) - containsKey >= self._capacity: last = self.popitem(last=False) print 'remove:', last if containsKey: del self[key] print 'set:', (key, value) else: print 'add:', (key, value) OrderedDict.__setitem__(self, key, value)CounterCounter是一个简单的计数器,例如,统计字符出现的个数:>>> from collections import Counter >>> c = Counter() >>> for ch in 'programming': ... c[ch] = c[ch] + 1 ... >>> c Counter({'g': 2, 'm': 2, 'r': 2, 'a': 1, 'i': 1, 'o': 1, 'n': 1, 'p': 1})Counter实际上也是dict的一个子类,上面的结果可以看出,字符'g'、'm'、'r'各出现了两次,其他字符各出现了一次。小结collections模块提供了一些有用的集合类,可以根据需要选用。
2025年03月04日
10 阅读
0 评论
0 点赞
2025-03-04
Python中实现URL的解析
在Python中的urlparse模块主要是用于解析url中的参数 对url按照一定格式进行 拆分或拼接 1.urlparse.urlparse将url分为6个部分,返回一个包含6个字符串项目的元组:协议、位置、路径、参数、查询、片段。import urlparse url_change = urlparse.urlparse('https://i.cnblogs.com/EditPosts.aspx?opt=1') print url_change 输出结果为:ParseResult(scheme='https', netloc='i.cnblogs.com', path='/EditPosts.aspx', params='', query='opt=1', fragment='')其中 scheme 是协议 netloc 是域名服务器 path 相对路径 params是参数,query是查询的条件 urlparse.parse_qs(urlparse.urlparse(url).query)这个是获取urlparse分割后元祖中的某一项 urlparse.urlparse(url).query 获取查询条件parse_qs 有几种实现urlparse.parse_qs 返回字典 urlparse.parse_qsl 返回列表 2. urlparse.urlsplit和urlparse差不多,将url分为5部分,返回一个包含5个字符串项目的元组:协议、位置、路径、查询、片段。import urlparse url_change = urlparse.urlsplit('https://i.cnblogs.com/EditPosts.aspx?opt=1') print url_change SplitResult(scheme='https', netloc='i.cnblogs.com', path='/EditPosts.aspx', query='opt=1', fragment='')其中 scheme 是协议 netloc 是域名服务器 path 相对路径 query是查询的条件 3.urlparse.urljoin将相对的地址组合成一个url,对于输入没有限制,开头必须是http://,否则将不组合前面。import urlparse new_url = urlparse.urljoin('https://baidu.com/ssss/','88888') print new_url 输出 https://baidu.com/ssss/88888如果输入错误信息 如 new_url = urlparse.urljoin('122','88888') 并不会将两者合并 输出‘88888’
2025年03月04日
2 阅读
0 评论
0 点赞
2025-03-04
Python中怎么像PS一样处理图像
Python中怎么像PS一样处理图像?在Python中有着丰富的第三方模块可以使用,PIL:Python Imaging Library是Python平台上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。安装PIL在Debian/Ubuntu Linux下直接通过apt安装:$ sudo apt-get install python-imagingMac和其他版本的Linux可以直接使用easy_install或pip安装,安装前需要把编译环境装好:$ sudo easy_install PIL如果安装失败,根据提示先把缺失的包(比如openjpeg)装上。Windows平台就去PIL官方网站下载exe安装包。操作图像来看看最常见的图像缩放操作,只需三四行代码:import Image # 打开一个jpg图像文件,注意路径要改成你自己的: im = Image.open('/Users/michael/test.jpg') # 获得图像尺寸: w, h = im.size # 缩放到50%: im.thumbnail((w//2, h//2)) # 把缩放后的图像用jpeg格式保存: im.save('/Users/michael/thumbnail.jpg', 'jpeg')其他功能如切片、旋转、滤镜、输出文字、调色板等一应俱全。比如,模糊效果也只需几行代码:import Image, ImageFilter im = Image.open('/Users/michael/test.jpg') im2 = im.filter(ImageFilter.BLUR) im2.save('/Users/michael/blur.jpg', 'jpeg')PIL的ImageDraw提供了一系列绘图方法,让我们可以直接绘图。比如要生成字母验证码图片:import Image, ImageDraw, ImageFont, ImageFilter import random # 随机字母: def rndChar(): return chr(random.randint(65, 90)) # 随机颜色1: def rndColor(): return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255)) # 随机颜色2: def rndColor2(): return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127)) # 240 x 60: width = 60 * 4 height = 60 image = Image.new('RGB', (width, height), (255, 255, 255)) # 创建Font对象: font = ImageFont.truetype('Arial.ttf', 36) # 创建Draw对象: draw = ImageDraw.Draw(image) # 填充每个像素: for x in range(width): for y in range(height): draw.point((x, y), fill=rndColor()) # 输出文字: for t in range(4): draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2()) # 模糊: image = image.filter(ImageFilter.BLUR) image.save('code.jpg', 'jpeg');我们用随机颜色填充背景,再画上文字,最后对图像进行模糊,得到验证码图片如果运行的时候报错:IOError: cannot open resource这是因为PIL无法定位到字体文件的位置,可以根据操作系统提供绝对路径,比如:'/Library/Fonts/Arial.ttf'要详细了解PIL的强大功能,请请参考PIL官方文档:http://effbot.org/imagingbook/
2025年03月04日
2 阅读
0 评论
0 点赞
1
...
9
10
11
...
16