python复习记录
type():内置函数
列表List:定义符号是[],一种数据结构的类。
每个具体的列表都是一个对象,一个对象由若干元素组成的集合,元素之间被逗号(,)分割,列表的元素可以是同类型元素组成的混合列表,也可以是不同类型的元素组成的混合列表。
字典Dictionary:含有映射关系数据类型,定义符号是{},定义/调用字典中某个元素的语句和列表相同,都是方括号[<索引值>]。
字典的索引与元素必须成对存在,且没有默认索引序列,所以字典对象并没有.append()方法可以直接增补元素。任何时候都必须显式地同步指定索引与元素。在字典中,一般称索引为键(key),元素为值(value)。
关键字in:检查元素表是否存在于特定的集合中。
需要注意的是,in对于字典判断的是键而不是值。
打开文件open():返回的是文件类的对象,需要通过read()对象转换为字符。
正则表达式:
import re
rule = '霸王'
replace = 'Kaiser'
target = '敢同恶鬼争高下,不向霸王让寸分'
print(re.sub(rule,replace,target))
敢同恶鬼争高下,不向Kaiser让寸分
a={'a':1,'b':2,'c':3}
for i in a :
print(i)
#i是字典的键值
b
a
c
json模块是一种轻量级的数据交换格式
重要函数:编码,把一个python对象编码转换成json字符串 json.dumps();解码,把json格式字符串解码成python对象,json.loads()
python读写json文件
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
JSON在python中分别由list和dict组成。
这是用于序列化的两个模块:
json: 用于字符串和python数据类型间进行转换
pickle: 用于python特有的类型和python的数据类型间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
json dumps把数据类型转换成字符串 dump把数据类型转换成字符串并存储在文件中 loads把字符串转换成数据类型 load把文件打开从字符串转换成数据类型
json是可以在不同语言之间交换数据的,而pickle只在python之间使用。json只能序列化最基本的数据类型,josn只能把常用的数据类型序列化(列表、字典、列表、字符串、数字、),比如日期格式、类对象!josn就不行了。而pickle可以序列化所有的数据类型,包括类,函数都可以序列化。
import json
test_dict={"Kareem Abdul-Jabbar":'kareem@jizhi.im',
"Karl Malone":'karl@jizhi.im',
"Kobe Bryant":'kobe@jizhi.im',
"Michael Jordan":'michael@jizhi.im',
"Wilt Chamberlain":'wilt@jizhi.im',
"DIRK NOWITZKI":'dirk@jizhi.im',
"Shaquille O'Neal":'shaquille@jizhi.im',
"Moses Malone":'moses@jizhi.im',
"Elvin Hayes":'elvin@jizhi.im',
"LeBRON JAMES":'lebron@jizhi.im'}
print(test_dict)
print(type(test_dict))
json_str = json.dumps(test_dict)
#dumps:将python中的 字典 转换为 字符串
print(json_str)
print(type(json_str))
{'Wilt Chamberlain': 'wilt@jizhi.im', 'Kobe Bryant': 'kobe@jizhi.im', 'LeBRON JAMES': 'lebron@jizhi.im', 'Karl Malone': 'karl@jizhi.im', 'Moses Malone': 'moses@jizhi.im', 'DIRK NOWITZKI': 'dirk@jizhi.im', 'Kareem Abdul-Jabbar': 'kareem@jizhi.im', 'Michael Jordan': 'michael@jizhi.im', "Shaquille O'Neal": 'shaquille@jizhi.im', 'Elvin Hayes': 'elvin@jizhi.im'}
<class 'dict'>
{"Wilt Chamberlain": "wilt@jizhi.im", "Kobe Bryant": "kobe@jizhi.im", "LeBRON JAMES": "lebron@jizhi.im", "Karl Malone": "karl@jizhi.im", "Moses Malone": "moses@jizhi.im", "DIRK NOWITZKI": "dirk@jizhi.im", "Kareem Abdul-Jabbar": "kareem@jizhi.im", "Michael Jordan": "michael@jizhi.im", "Shaquille O'Neal": "shaquille@jizhi.im", "Elvin Hayes": "elvin@jizhi.im"}
<class 'str'>
new_dict = json.loads(json_str)
print(new_dict)
#loads: 将 字符串 转换为 字典
print(type(new_dict))
{'Wilt Chamberlain': 'wilt@jizhi.im', 'Kobe Bryant': 'kobe@jizhi.im', 'LeBRON JAMES': 'lebron@jizhi.im', 'Karl Malone': 'karl@jizhi.im', 'Moses Malone': 'moses@jizhi.im', 'DIRK NOWITZKI': 'dirk@jizhi.im', 'Kareem Abdul-Jabbar': 'kareem@jizhi.im', 'Michael Jordan': 'michael@jizhi.im', "Shaquille O'Neal": 'shaquille@jizhi.im', 'Elvin Hayes': 'elvin@jizhi.im'}
<class 'dict'>
with open ('address.json','w') as f:
json.dump(test_dict ,f)#dump: 将数据写入json文件中
with open('address.json', 'r') as f:
test_dict = json.load(f)#load:把文件打开,并把字符串变换为数据类型
print(test_dict)
print(type(test_dict))
{'Wilt Chamberlain': 'wilt@jizhi.im', 'Kobe Bryant': 'kobe@jizhi.im', 'LeBRON JAMES': 'lebron@jizhi.im', 'Karl Malone': 'karl@jizhi.im', 'Moses Malone': 'moses@jizhi.im', 'DIRK NOWITZKI': 'dirk@jizhi.im', 'Kareem Abdul-Jabbar': 'kareem@jizhi.im', 'Michael Jordan': 'michael@jizhi.im', "Shaquille O'Neal": 'shaquille@jizhi.im', 'Elvin Hayes': 'elvin@jizhi.im'}
<class 'dict'>
元组
和列表非常相似,可以包含若干元素,并且调用的方式都是通过方括号在[]+索引的形式。
主要区别在于:元组用括号()定义,列表用方括号[]定义;元组不可更改;即使只有一个元素,也需要逗号,如果缺了这个逗号,得到的仍是元素本身,而不是元组;元组只能在定义时赋值,如果强行更改会得到解释器的错误。
def sum_times(x,y):
return (x+y),(x*y)
sum_times(2,3)
#返回的值存在元组中
(5, 6)
数据库
结构化存储数据的格式,为了更加灵活的处理数据,程序不再一次性将所有数据读入内存,而是根据具体需要进行查询,获得相应的数据集,完成这项工作的程序语言叫做SQL(Structured Query Language )
SQL是转为查询、操作数据库所用的语言。一个数据库由若干个表(table)组成,每个表又包含行(row)和列(column),一行代表一个样本,多列定义了各个维度上的属性。
python有专门处理SQLite语句的库。
import sqlite3
conn = sqlite3.connect(‘nbaallelo.db’)
cur = conn.cursor()
query = ‘SELECT elo_n,win_equiv FROM sheet LIMIT 5’
cur.execute(query)
elos = cur.fetchall()
conn.close()
print(elos)
连接对象:首先是建立与数据库的联系,sqlite3.connect()将返回Connection实例对象,然后存为conn变量,此时的conn对应的是整个数据库。
游标对象:Connection对象的.cursor()可以创建游标对象(cursor object)。游标对象可以对数据库执行SQL语句并进行更灵活的数据操作。
query是纯SQL语句,通过cur.execute()实际执行,此时数据库查询的结果仍在cur对象中。最后调用cur.fetchall()将查询结果全部返回,并存至变量elos,就是最终得到的元组列表。
如果只想返回一条查询结果,可以使用cur.fetchone()。
类
定义类的关键字是‘class’
在类的代码段中,再定义一个特别的函数:init(),init前后各有两条下滑线,本函数用以定义属性。
一个类有属性和方法,init()就是特殊的一种属性,当对象被创建时,就会被自动调用,init()函数以self为参数,在一个类的定义代码中,self指代的是当前创建过程中的对象。self总是init()的第一个参数,在创建对象时无需显式声明。