python 学习第三天

时间:2021-09-20 20:53:33

一,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的交集

1 x={1,2,4,7}
2 y={4,5,6,2}
3 print(x.union(y))
4 print(x.difference(y))
5 print(x.intersection(y))

   (3) x.issubset(y)若x包含于y,返回True,x.issuperset(y)      若x包含y,返回True   

1 x={2,4}
2 y={4,5,6,2}
3 print(x.issubset(y))
4 print(x.issuperset(y))

   (4)len(x) 获取xj集合的长度,清除x集合中的数据

1 x={2,4}
2 print(len(x))
3 x.clear()
4 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为文件句柄,属于一个内存对象

1 f = open("file.txt","r")
2 print(f.read())

    (2)读取文件中的内容

      read() 读取整个文件的内容,readline()每次执行顺序读取一行,readlines()读取文件的所有,并将每一行作为一个元素,存放在列表中,三者的区别,可以以下的代码做一下对比

      read()

1 f = open("file.txt","r")
2 print(f.read())
3 f.close()

      readline()

1 f = open("file.txt","r")
2 print(f.readline())
3 print(f.readline())
4 print(f.readline())
5 f.close()

     readlines()

1 f = open("file.txt","r")
2 print(f.readlines())

     注意:(1)read(),readlines()都是一次性将文件读出,加载到内存中,要是文件比较大,这种两种读法是不可取的,会消耗较大的内存和时间

              (2)readline和readlines()读取文件内容时都会读取文件的换行符“\n”,不过可以用split(“\n”)去掉换行符

              (3)在操作完文件时一定要将文件关系,f.close()

              (4)在读取大文件是,不能用read(),readlines()方法,不过可以用一下更高效的方法来实现读取整个文件,在内存中只有一行

1 f = open("file.txt","r")
2 for line in f:
3     print(line)
4 f.close()

    (3) 写入文件 w  “w”模式为重新新建一个文件并写入内容,所以文件本身有文件,需要再写入内容时,一定要将文件原来的内容保存一份

1 f = open("file.txt","w")
2 f.write("1234")

    (4) 追加写a  "a"是以追加放方式写入文件,注意以a的方式写入文件时,需要在写入内容前加上“\n”,否则,写入内容会追加在最后一行的后面,如果文件不存在,则新建

1 f = open("file.txt","a")
2 f.write("\n1234")

    (5) r+ 读写模式,r+可读可写,不会创建不存在的文件。如果直接写文件,则从顶部开始写,覆盖之前此位置的内容,如果先读后写,则会在文件最后追加内容。不会创建不存在的文件。

1 f = open("file.txt","r+")
2 print(f.read())
3 f.write("\n44555")
1 f = open("file.txt","r+")
2 f.write("345678\n")
3 print(f.read())

 

   (6) w+ 写读模式,先创建文件,再写,用处不大

   (7) a+ 附加加读写 不存在则创建 。需要注意的时open()以a+模式开启了一个附加读写模式的文件,由于是a,所以指针在文件末尾。此时如果做read(),则Python发现指针位置就是EOF,读取到空字符串。

所以以a+模式打开文件后,需要利用seek(0)的方法,将文件指针指向文件头部,然后再读取。也就是说如果没有seek(0) f.read()将读不到文件内容

1 f = open("file.txt","a+")
2 f.seek(0)
3 print(f.read())
4 f.write("678")

  (8)f.seek(),  

      file.seek()方法标准格式是:seek(offset,whence=0)

      offset:开始的偏移量,也就是代表需要移动偏移的字节数

      whence:给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

      (9) 在open函数中,打开文件后,我们需要关闭文件,但以下的打开文件方式,不需要执行关闭文件,代码如下

1  with open("file.txt","w") as f:
2  f.write("1111")

 

  三,编码转换

  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的转化过程。

 python 学习第三天

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为实际的值,叫做实参