数据类型、字符编码、文件处理

 

第1章 引子

1.1 什么是数据?+

aa =cc就是我们要存储的数据。

1.2 为什么要使用数据

数据用来表示状态,不同的状态用不同的类型表示

1.3 数据的类型

1)    数字(整型,字符串,浮点,复数)

2)    字符串

3)    列表

4)    字典

1.4 按照以下几个点展开数类型的学习

基本使用

1)用途

2)定义方式

3)常用操作+内置的方法

 

 

 

第2章 数字

基本使用:

int用途:年龄,等级,各种号码

定义方式:

age=10

 

float用途:身高,体重,薪资

定义方式:

height=1.83

print(id(age))

age=19

print(id(age))

 

salary=3.1

print(id(salary))

salary=3.2

print(id(salary))

 print(hash(10))

print(hash([1,2,3]))

 
View Code

 

 

 

常用的操作+内置方法:

print(bin(3)) #把3转换成二进制
print(oct(8))#转换成8进制
print(10)
print(hex(16))#转换成16进制

 

该类型总结

存一个值or存多个值

    只能存一个值

    可以存多个值,值都可以是什么类型

有序or无序

可变or不可变

    !!!可变:值变,id不变。可变==不可hash

!!!不可变:值变,id就变。不可变==可hash

 

 

 

第3章 字符串

一:基本使用

str用途:描述性的数据,比如名字\国籍\学历\家庭住址

定义方式:在单引号或双引号或三引号内的一串字符

name='egon' #name=str('egon')

掌握:

str(10) #int('10')

 

 

了解知识

res=str(10)

res=str([1,2,3,4])

print(res,type(res))

int('10')

res=float('10.3')

print(res,type(res))

 

 

 

3.1 常用操作+内置的方法

优先掌握的操作:

3.1.1 、按索引取值(正向取+反向取) :只能取

name='egon你好'

print(name[0])

print(name[4])

print(name[1000])

 

print(name[-1])

print(type(name[-2]))

name[-1]=''

 
View Code

 

3.1.2 、切片(顾头不顾尾,步长)

msg='alex say my name is sb'

print(msg[0:6])

print(msg[0:6:2]) #alex s

                  ae

 

 

 

了解:

# print(msg[0:5:1])

# print(msg[3:1:-1])

# print(msg[-1:-5:-1])

# msg='alex is sb'

# print(msg[0:10:1])

# print(msg[:])

# print(msg[::1])

# print(msg[::-1])

 

 

3.1.3 长度len

msg='alex say my name is sb'

print(len(msg)) # 字符的个数

 

 

3.1.4 成员运算in和not in

msg='alex say my name is sb'

print('alex' in msg)

print('alex' not in msg)

 

     

 

3.1.5 移除空白strip

s='*****egon****'

print(s.strip('*'))

s=s.strip('*')

print(s)

 

name='    egon     '

print(name.strip())

 

 

3.1.6 改进

name=input('用户名>>: ').strip()

print(len(name))

name=name.strip()

if name == 'alex':

     print('用户名正确')

 

 

3.1.7 切分split

info='egon:123:admin'

res=info.split(':')

print(res,type(res))

print(res[0])

 

cmd='get|a.txt|32123123'

# print(cmd.split('|'))

 

 

 

3.1.8 循环

msg='alex'

i=0
while True:
    if i < len(msg):
        print(msg[i])
        i+=1
    else:
        break

msg='alex'

i=0
while True:
    if i == len(msg):
        break
    print(msg[i])
    i+=1


msg='alex'

i=0
while i < len(msg):
    print(msg[i])
    i+=1

msg='alex'
for item in msg: #item='l'
    print(item)

for item in 11111: # 只有字符串,列表,字典
    print(item)

 
View Code

 

 

3.2 总结

该类型总结

存一个值or存多个值

    只能存一个值

    可以存多个值,值都可以是什么类型

有序or无序

可变or不可变

    !!!可变:值变,id不变。可变==不可hash

    !!!不可变:值变,id就变。不可变==可hash

 

 

3.3 需要掌握的操作

3.3.1 strip,lstrip,rstrip

print('***sss***'.strip('***'))#去中间
print('***sss***'.lstrip('***'))#省略左边
print('***sss***'.rstrip('***'))#省略右边

 

 

3.3.2 lower,upper

print('SEX'.lower())#翻转输入大小变成小写
print('sex'.upper())#翻转输入小写变成大写

 

 

 

3.3.3 startswith,endswith

print('alex is sb'.startswith('alex'))   #从前面顺序开始判断

print('alex is sb'.endswith('sb'))       #从后面倒序开始判断

 

 

3.3.4 format的三种玩法

 

第一种:{}
s1=('my name is %s my age is %s '%('egon',18))
s2=('my name is {} my age is {}' .format('egon',18))
print(s1)
print(s2)

 

s1=('my name is %s my age is %s '%('egon',18))
s2=('my name is {} my age is {}'.format('egon',18,19))
print(s1)
print(s2)

 

 

# 第二种:
s2=('my name is {0} my age is {1} {2} {3} {4} {5} '.format('egon',1,2,3,4,5))
print(s2)

 

 

#第三种:
s2=('my name is {name} my age is {age}'.format('name=egon',age=18))
print(s2)
View Code

 

 

 

3.3.5 split,rsplit

cmd='get|c:\a.txt|3333'

print(cmd.split('|',1))  #split('切分条件',切分次数,-1为全部)

print(cmd.rsplit('|',1))

 

 

 

3.3.6 jion(jion) 

cmd='egon:123:admin:rwx'

l=cmd.split(':') 

print(l)

res=':'.join(l)   # '以什么拼接'.join(字符串名)

 

':'.join([1,2,3])  #join方法传入的列表必须只包含str类型的元素

 

 

 

 

3.3.7 replace 

msg='wupeiqi say my name is  wupeiqi'

#print(msg.replace('wupeiqi','SB'))   #replace('待替换的值','替换的新值' 替换次数不输全部替换)

#print(msg.replace('wupeiqi','SB',1))

 

 

 

3.3.8 isdigit  判断是否是数字

age=10

while True:

    inp = input('>>:').strip()   #去除用户输入的空格

    if inp.isdigit():       #判断用户输入的是否为数字

        inp =int(inp)       #将用户转化为 int

        if inp > age :

            print('猜大了')

        elif inp == age:

            print('猜对了')

            break

        else:

            print('猜小了')

    else:

        print('输入非法')

          
View Code

 

          

##其他操作

 1、查找字符在字符串中的位置

 find(),rfind(),index(),rindex(),count()

 msg ='my egon hegon 123'

 print(msg.find('sb'))   #寻找查找字符的位置,如果查找不到返回 -1

 print(msg.find('egon',8,20))  #从第8位开始查找,到20结束

 print(msg.rfind('egon',8,20)) #倒序查找,返回的位置还是正序

 print(msg.index('egon'))  #跟find功能类似,但是查找不到会报错

 print(msg.index('sb'))

 

 

 

2、填充

center() ljust(l just) rjust(r just ) zfill()

 

print('dream'.center(50,'*'))  #居中填充 (字符个数,'填充字符')

print('dream'.ljust(50,'*'))  #靠左填充

print('dream'.rjust(50,'*'))  #靠右填充

print('dream'.zfill(50))   #靠右填充 0

 

3、expandtabs()

msg = 'abc\tdef'

print(msg)      #  \t 等同于一次tab键 空一个

print(msg.expandtabs(10))   # 里输入几就代表输入几个\t

 

4、大小写转换

capitalize(capt lize) swapcase(swap case ) title()

print('dReAm'.capitalize())  #首字母大写,其它小写

print('DrEam'.swapcase())   #大写转小写,小写转大写

print('my name is egon'.title())   #每个单词,首字母大写

 

5、is数字系列

num1=b'4'  #bytes

num2=u'4'  #unicode

python3 中无需加u就是Unicode

num3=''  #中文数字

num4=''  #罗马数字

 

 

print(num1.isdigit())

print(num2.isdigit())

print(num3.isdigit())

print(num4.isdigit())

 

print(num2.isdecimal())

print(num3.isdecimal())

print(num4.isdecimal())

 

print(num1.isalnum())

print(num2.isalnum())

print(num3.isalnum())

print(num4.isalnum())

 
View Code

 

###总结字符串类型

1、能存几个值

   只能存一个值

 

2、有序or无序

       有序

 

3、可变or不可变

      不可变

        可hash

       

第4章 列表

####列表类型

1、用途:存放多个值

 

2、定义方式:[]内以逗号为分隔多个元素,列表内元素无类型限制

l=['a','b','c']   #l=list(['a','b','c'])

l1=list('hello')

 

4.1 常用操作+内置方法

####优先掌握的操作:

4.1.1 按索引存取值(正向存取+反向存取):即可改也可以取

1=['a','b','c']

  print(id(l))

print(l[-1]

l[0] = 'A'

print(id(l))

l[3] = 'd'       # 不存在的索引,报错

 

4.1.2 切片(顾头不顾尾,步长)

stus = ['alex', 'wxx', 'yxx', 'lxx']

 print(stus[0:3:1])

 

4.1.3 长度 len()

 stus = ['alex', 'wxx', 'yxx', 'lxx']

 print(len(stus))

 

4.1.4 成员运算 in 和 not in

 stus = ['alex', 'wxx', 'yxx', 'lxx']

 print('alex' in stus)

4.1.5 追加(.append)

 stus = ['alex', 'wxx', 'yxx', 'lxx']

                stus.append('wupeiqi')

                stus.append('peiqi')

                print(stus)

4.1.6 插入(insert)

stus=['alex','egon','wxx','yxx','lxx']

stus.insert(1,'艾利克丝')

print(stus)

 

4.1.7 删除

stus=['alex','egon','wxx','yxx','lxx']

del stus[1]      #什么都能删的del

stus.remove('alex')   #单纯的删除,需要直接输入值来进行删除

stus.pop()   #取走一个值,()不加参数,默认删除末尾

 

4.1.8 循环

stus=['alex','egon','wxx','yxx','lxx']

 

4.1.8.1   依赖索引

i=0

while i< len(stus):

     print(stus[i])

     i+=1        

4.1.8.2   不依赖索引

for i in range(0,5,2) : #从0开始取到第五个 步长 2

for i in range :   #默认从0起始

     print()

     

例

stus=['alex','egon','wxx','yxx','lxx']

for i in range(len(stus)) :

    print(stus[i])

   

###需要掌握的操作

stus=['alex','egon','wxx','yxx','lxx']

stus.count()

stus.extend()

stus.index()

stus.reverse()

stus.sort()

 

 

#大前提:只能同类型直接比较大小,对于有索引值的比较是按照位置一一对应进行比较的

s1='hello'

s2='hf'

print(s1>s2)

 

l1=[3,'a','b','c']

l2=['xxx','d']

print(l1>l2)

 

print('Z'>'a')

 

#了解

1=stus.copy()

clear

 

 

 

#练习

队列:先进先出

 

l1=[]

入队

l1.append('first')

l1.append('second')

l1.append('third')

print(l1)

出队

print(l1.pop(0))

print(l1.pop(0))

print(l1.pop(0))   #每次提取第一个

 

堆栈:先进后出

 

4.2 总结

总结列表类型:

1、能存多个值

2、有序

3、可变

第5章 元组

作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读

定义:与列表类型比,只不过[]换成()

age=(11,22,33,44,55)本质age=tuple((11,22,33,44,55))

强调:在元素相同的情况下,使用元组更加节省空间

 

5.1 常用操作加内置的方法(优先掌握的方法)

5.1.1 按索引取值(正向取+反向取):只能取  

>>> t=(1,2,3,4,5,6)

>>> print(t[0])

1

>>> print(t[-1])

6

 

 

5.1.2 切片(顾头不顾尾,步长)

>>> t=(1,2,3,4,5,6)

print(t[1:4])

(2, 3, 4)

 

print(tuple('hello')) #打印分割字符串

>>> print(tuple('hello'))

('h', 'e', 'l', 'l', 'o')

 

for  i  in  range(10000):      循环9999次
    print(i)

 

 

 

5.1.3 长度

成员运算in和not in

5.1.4 循环

 

第6章 字典

用途:以key:value的形式存多个值

优点:存取都快,每一个值都有对应的key

定义方式:{}内以逗号分隔多个元素,格式为key:value,

其中key必须为不可变类型,value可以是任意类型

dic={'x':1,'y':1,'x':1111} #dic=dict({'x':1,'y':1,'x':1111})

print(dic)

 

 

6.1 常用操作+内置的方法(优先掌握方法)

6.1.1 按key存取值:可存可取

dic={'name':'egon'}
dic['age']=10
print(dic)

 

 

6.1.2 长度len

dic={'name':'egon','age':18}
print(len(dic))

 

6.1.3 成员运算in和not in:判断的字典的key

6.1.4 删除

dic={'name':'egon','age':18}
del dic['name']
print(dic)
res=dic.pop('name')
print(res)
print(dic)

res=dic.pop('sex',None)
print(res)

 

6.1.5 键keys(),值values(),键值对items()

dic={'name':'egon','age':18}
print(dic.keys())
print(dic.keys())
for x in dic.keys():
    print(x)
print(list(dic.keys())[0])
print(dic.values())
print(list(dic.keys()[]))

6.1.6 循环

for key in dic.keys():
    print(key)
for value in dic.values():
    print(value)

print(dic.items())
for k,v in dic.items(): #k,v=('name', 'egon')
    print(k,v)

print(type(dic.items()))

第7章 集合

用途:关系运算,去重

定义:

可变类型是不可hash类型

不可变类型是可hash类型

 

注意的问题:

1)没有重复的元素

2)集合的元素必须是不可变类型

7.1 优先掌握的操作

7.1.1长度len

7.1.1 交集

stus_linux={'alex','egon','张全蛋','李铁蛋','oldboy'}
stus_python={'李二丫','wxx','liudehua','alex','egon'}

 

print(stus_linux & stus_python)

print(stus_linux.intersection(stus_python))

 

7.1.2 并集

stus_linux={'alex','egon','张全蛋','李铁蛋','oldboy'}
stus_python={'李二丫','wxx','liudehua','alex','egon'}

 

所有的学生:并集
print(stus_linux | stus_python)
print(stus_linux.union(stus_python))

 

7.1.3 差集

stus_linux={'alex','egon','张全蛋','李铁蛋','oldboy'}
stus_python={'李二丫','wxx','liudehua','alex','egon'}

 

只报名linux,没有报名python的:差集
print(stus_linux - stus_python)
print(stus_linux.difference(stus_python))

7.1.4 交叉补集

stus_linux={'alex','egon','张全蛋','李铁蛋','oldboy'}
stus_python={'李二丫','wxx','liudehua','alex','egon'}

 

没有同时报名两门课程的学生姓名:交叉补集
print(stus_linux ^ stus_python)
print(stus_linux.symmetric_difference(stus_python))

 

 

第8章 运算符

身份运算(is ,is not)

is比较的是id,而双等号比较的是值

毫无疑问,id若相同则值肯定相同,而值相同id则不一定相同

>>> x=1234567890

>>> y=1234567890

>>> x == y

True

>>> id(x),id(y)

(3581040, 31550448)

>>> x is y

False

 

第9章 数据类型总结

9.1 按照存储空间的占用分(顺序从低到高)

数字

 

字符串

 

集合:

无序,即无也无索引相关信息

元组:

有序,需要存索引相关信息,不可变

列表:

有序,需要存索引相关信息,可变,需要处理数据的增删改

字典:

无序,需要存key与value映射的相关信息,可变,需要处理数据的增删改

 

 

9.2 按照存值个数区分

标量/原子类型

数字,字符串

容器类型

列表,字典,元组

 

9.3 按可变不可区分

可变

字典,列表

不可变

数字,字符串,元组

 

 

 

 

9.4 按照访问顺序区分

直接访问

数字

顺序访问(序列类型)

列表,元组,字符串

key值访问(映射类型)

字典

 

 

第10章 字符编码

10.1 知识储备

1)

CPU

内存

硬盘

2)文本编辑器

  结论:在编写py程序的时候,是没有语法的限制,编辑的结果跟编写一个普通的文本文件是没有任何区别,只有把py程序交给python解释器并且在运行的第三个阶段才有语言意义。

3)python解释器实行python程序的原理

   python3  test.py

   第一阶段:先启动python解释器这个软件

   第二阶段:将test.py文件读到内存

   第三阶段:解释执行,识别语法

 

4)文本编辑器读原理

文件处理

  

 

 

10.2 什么是字符编码

人类的字符---> 翻译 ---> 数字

   翻译的过程必须遵循一个标准:字符与数字一一对应的关系

   这个标准称之为字符编码表

    ASCII

    8bit=1bytes,一个英文占用1字节

     

      GBK

      16bit=2bytes   2个字节表示一个中文字符,1个字节表示一个英文字符

     

      unicode(内存中固定的编码)

      16bit =2bytes  2个字节表示一个字符

     

      utf-8:Unicode Transformation Format

      #3个字节表示一个中文字符,1个字节表示一个英文字符

     

     

      #保证不乱码的核心就是:文件是以什么编码存的,就必须以该编码独取

      #强调:我们能控制的只是硬盘存与取。

      #python3解释器,默认UTF-8编码

      #python2解释器,默认ASCII编码

     

10.3     文件头的作用!!!重点

coding:utf-8 是告诉python解释器,用我指定的编码。

    

10.4 执行python程序第三个阶段发生的事

    会识别python语法,定义的字符串类型又涉及到字符编码的概念

    x='上'    #x=str('上')

    python2:

          字符串分为两种形式:

              x='上'  #python2的strx类型会按照文件头指定的编码来存‘上’

                str

               unicode

    python3:

            str:被存成了unicode

     

10.5 转换

       unicode ---> 编码encode -->gbk    #.encode()

       gbk--------->解码decode----->unicode  #.decode()

       #解码    .decode()

10.6 总结

文件头跟存的编码要一样.

posted @ 2018-03-24 22:50  Jacob先生  阅读(805)  评论(0编辑  收藏  举报