一,Python的数据结构-集合
1,集合的定义
Python中集合是以{}括起来的,例如x=set({1,2,3,4,5}),这就是一个集合,集合的特点有:(1),去重的(2),无序的,集合的作用用:如下,(1)去重,把一个列表变成集合,就自动去重了(2)关系测试,测试两组数据之前的交集、差集、并集等关系
对于集合的无序这里要说一下,并不是你定义的时候不能写重复的元素,其实是可以写重复的元素的,并且python也不会报错,只不过在输出的时候时候,或者在做其它方面的处理时,python会已去重的集合来做运算,举个例子:
x={1,2,2,3,4,4}
print(x)
{1, 2, 3, 4}
2,集合的方法
(1) x.add(*)增加一个元素.x.pop()删除一个元素,x.remove(*)删除一个指定的元素
x={1,2,4,7}
x.add(5)
print(x)
x.pop()
print(x)
x.remove(4)
print(x)
(2) x.union(y)求x集合和y集合的并集,x.difference(y)求x中有但y中没有的元素,x.intersection(y)求x和y的交集
x={1,2,4,7}
y={4,5,6,2}
print(x.union(y))
print(x.difference(y))
print(x.intersection(y))
(3) x.issubset(y)若x包含于y,返回True,x.issuperset(y) 若x包含y,返回True
x={2,4}
y={4,5,6,2}
print(x.issubset(y))
print(x.issuperset(y))
(4)len(x) 获取xj集合的长度,清除x集合中的数据
x={2,4}
print(len(x))
x.clear()
print(x)
二,Python 文件操作
1,open函数语法
open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]])
open函数有很多的参数,常用的是file,mode和encoding
file文件位置,需要加引号
mode文件打开模式,见下面表格
encoding表示的是返回的数据采用何种编码,一般采用utf8或者gbk;
2,mode参数的取值
Character | Meaning |
‘r' | open for reading (default) |
‘w' | open for writing, truncating the file first |
‘a' | open for writing, appending to the end of the file if it exists |
‘b' | binary mode |
‘t' | text mode (default) |
‘+' | open a disk file for updating (reading and writing) |
‘U' | universal newline mode (for backwards compatibility; should not be used in new code) |
其中r、w、a为打开文件的基本模式,对应着只读、只写、追加模式;
b、t、+、U这四个字符,与以上的文件打开模式组合使用,二进制模式,文本模式,读写模式、通用换行符,根据实际情况组合使用、
(1)以r方式打开文件,其中 f为文件句柄,属于一个内存对象
f = open("file.txt","r")
print(f.read())
(2)读取文件中的内容
read() 读取整个文件的内容,readline()每次执行顺序读取一行,readlines()读取文件的所有,并将每一行作为一个元素,存放在列表中,三者的区别,可以以下的代码做一下对比
read()
f = open("file.txt","r")
print(f.read())
f.close()
readline()
f = open("file.txt","r")
print(f.readline())
print(f.readline())
print(f.readline())
f.close()
readlines()
f = open("file.txt","r")
print(f.readlines())
注意:(1)read(),readlines()都是一次性将文件读出,加载到内存中,要是文件比较大,这种两种读法是不可取的,会消耗较大的内存和时间
(2)readline和readlines()读取文件内容时都会读取文件的换行符“\n”,不过可以用split(“\n”)去掉换行符
(3)在操作完文件时一定要将文件关系,f.close()
(4)在读取大文件是,不能用read(),readlines()方法,不过可以用一下更高效的方法来实现读取整个文件,在内存中只有一行
f = open("file.txt","r")
for line in f:
print(line)
f.close()
(3) 写入文件 w “w”模式为重新新建一个文件并写入内容,所以文件本身有文件,需要再写入内容时,一定要将文件原来的内容保存一份
f = open("file.txt","w")
f.write("")
(4) 追加写a "a"是以追加放方式写入文件,注意以a的方式写入文件时,需要在写入内容前加上“\n”,否则,写入内容会追加在最后一行的后面,如果文件不存在,则新建
f = open("file.txt","a")
f.write("\n1234")
(5) r+ 读写模式,r+可读可写,不会创建不存在的文件。如果直接写文件,则从顶部开始写,覆盖之前此位置的内容,如果先读后写,则会在文件最后追加内容。不会创建不存在的文件。
f = open("file.txt","r+")
print(f.read())
f.write("\n44555")
f = open("file.txt","r+")
f.write("345678\n")
print(f.read())
(6) w+ 写读模式,先创建文件,再写,用处不大
(7) a+ 附加加读写 不存在则创建 。需要注意的时open()以a+模式开启了一个附加读写模式的文件,由于是a,所以指针在文件末尾。此时如果做read(),则Python发现指针位置就是EOF,读取到空字符串。
所以以a+模式打开文件后,需要利用seek(0)的方法,将文件指针指向文件头部,然后再读取。也就是说如果没有seek(0) f.read()将读不到文件内容
f = open("file.txt","a+")
f.seek(0)
print(f.read())
f.write("")
(8)f.seek(),
file.seek()方法标准格式是:seek(offset,whence=0)
offset:开始的偏移量,也就是代表需要移动偏移的字节数
whence:给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
(9) 在open函数中,打开文件后,我们需要关闭文件,但以下的打开文件方式,不需要执行关闭文件,代码如下
with open("file.txt","w") as f:
f.write("")
三,编码转换
1,先来说明一下字符编码的发展史
(1) ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
(2) ASCII 这127个字符完全就可以表示所有英文中能用的的内容了。但是无法支持中文,所以后面出现了ASCII的扩展,gbk、gb2312、gb2318字符编码。这样就可以很好的支持中文了
(3) 仅仅支持中文,英文是不够的,还要支持其它语言,这就出现了“万国编码”unicode。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536, 注:此处说的的是最少2个字节,可能更多。
(4)这里还有个问题:使用的字节增加了,那么造成的直接影响就是使用的空间就直接翻倍了!举例还说:同样是ABCD这些字符存储一篇相同的文章,使用ASCII码如果是1M的话,那么Unicode存储至少2M可能还会更多。为了解决个问题就出现了:UTF-8编码UTF-8编码:是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存
2,编码转化
下图展示了,从utf-8到gbk的转化过程。
3,程序例子,希望下面这个例子能帮助大家理解编码转换
deconde 将某种编码解码为unicode, 需要告诉deconde,转化前的编码,deconde("utf-8")
enconde 讲unicode转化为其他编码,需要告诉enconde,转化到哪个编码,enconde("gbk")
import sys
print(sys.getdefaultencoding())
s="你好"
s_to_gbk=s.encode("gbk")
print(s_to_gbk)
print(s.encode())
s_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8")
print(s_to_utf8)
四,Python的函数
(1) Python的函数书写格式以及函数的调用
def function(): #函数名():
function.... #函数体
function() #函数名()调用函数,
(2)python 传参,形参,实参
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
def funt (x,y): #x,y类似于变量参数,叫做形参
num = x+y
print(num) funt(1,2) #1,2为实际的值,叫做实参