zoukankan      html  css  js  c++  java
  • python字典、list、字符串常见处理方法、元组、文件读写

    1.字符串常用方法

    name=‘abc’
    print(name.capitalize()) #把字符串首字母大写,结果: Abc
    print(name.center(100,'-')) #把字符串居中 结果: --------------abc------------其中:abc和‘-’加起来等于100
    print(name.index('p'))#找不到下标的时候会报错 结果:报错
    print(name.isalnum()) #只能有英文、数字就是合法的 结果:True
    print(name.isalpha()) #判断是否只为英文的,汉字也可以 结果:True
     print(name.istitle())#是否为标题,首字母全部为大写时为true  结果:False
    以上函数不太常用
    重点掌握以下内容:
    print(name.count('欢'))#查询次数    结果:0
    print(name.endswith('.jpg'))#判断字符串是否以xx结尾 布尔类型的(Ture和False首字符要大写) 结果:False
    print(name.startswith('138'))#判断字符串是否以xx开头 结果:False
    print(name.upper())#都变成大写的 结果:ABC
    print(name.lower())#都变成小写的 结果:abc
    print(name.find('p'))#找不到元素的时候不会报错,返回-1 结果-1
    print(name[1])#字符串也是可以根据下标来取值的 结果:b
    print(name.isdigit())#判断是否为纯数字 结果:False
    print(name.isidentifier())#判断是否为合法的变量名 结果:True
    print(name.isspace())#判断是否全部为空格 结果False
    print(name.strip('xx'))#去掉字符串两边的东西,里边不写值时默认去除空格和换行符 结果:abc
    print(name.rstrip())#只去掉右边的 结果:abc
    print(name.lstrip())#只去掉左边的 结果:abc
    print(name.replace('ab','sad'))#替换字符串,把前边的替换为后边的,写数字时,表示替换几次,不写表示替换全部 结果:sadc
    print(name.zfill(5))#数字前边补零,括号里数字表示共多少位,不足时前边补0 结果:00bac
    names='''
    fdfdf
    gdgdg
    fsfs
    fsfsf
    fsfsf
    '''
    print(names.split())#1.分割字符串 2.把字符串变为list 3.默认以空格和换行符分割的,split后边括号写什么就以什么分割 结果:['fdfdf', 'gdgdg', 'fsfs', 'fsfsf', 'fsfsf']

    stus=['da','dada','fdf','fdfd','fdf','fdf','dfdfd']
    print('、'.join(stus))#1.把list变成字符串 2.以某个字符串连接 结果:da、dada、fdf、fdfd、fdf、fdf、dfdfd

    import string
    print(string.ascii_letters) #所有的大写字母和小写字母 结果:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    print(string.ascii_lowercase)#所有的小写字母 结果:abcdefghijklmnopqrstuvwxyz
    print(string.ascii_uppercase)#所有的大写字母 结果:ABCDEFGHIJKLMNOPQRSTUVWXYZ
    print(string.digits)#所有的数字 结果:0123456789
    print(string.punctuation)#所有的数字 结果:!"#$%&'()*+,-./:;<=>?@[]^_`{|}~
    *************************************************************************
    a = [1,1,2,3,4,5,6,72]
    for i in a:
    if i%2!=0:
    a.remove(i)
    print(a) 结果:[1,2,4,6,72] 原因在删除list第一个元素1时,下次循环开始找第二个元素,但是此时的元素位置已经改变,因此第二次找到的元素为2,将第二个1漏掉了,此方法不可取

    可用以下方法进行删除操作:
    a = [1,1,2,3,4,5,6,72]
    b = a[:]
    for i in b:
    if i%2!=0:
    a.remove(i)
    print(a)
    *************************************************************
    a='hahah'
    b=a
    print('重新赋值之前的',id(a))
    print('重新赋值之前的',id(b)) a、b的地址是一样的
    a='dd'
    print('重新赋值之后的',id(a))
    print('重新赋值之后的',id(b)) a、b的地址不同
    ****************************************************************
    定义变量的方式:

    a = b = c = d = 0

    e,f,g = 1,2,3

    不引入第三方变量的方式把a,b交换过来:
    a = 1
    b = 2
    a = a + b #1+2 3
    b = a - b # 3 -2 1
    a = a - b # 3-1 2


    # b,a = a,b

    字符串格式化之format
    msg = '欢迎光临 {name} ,今天的日期是 {today} '

    msg = msg.format(name='xxx',today=datetime.datetime.today() )
    print(msg)
    sql = 'insert into my_user value ({id},{name},{addr},{sex},{phone}) '
    sql.format(name='aaa',addr='sdfsfd',sex='xxx',id=11)

    sql = 'insert into {} value {}; '.format('abc,','bcd')
    print(sql)
    sql='insert into my_user value (%s,%s,%s,%s,%s,%s,%s,%s)'%(id,name,sex,addr,phone,)

    d = {'name':'小黑','sex':'不知道'}
    words ='名字 {name} ,性别 : {sex}'.format_map(d)


    2.list
    stus=['ffs','ggfgf','gfgf','dsds','fdfd','dfdsfs']
    for i in range(stus):
    print(stus[i]) 按顺序将list中的每个元素取出来;此方法同样适用于字符串,效果相同
    结果:
    ffs
    ggfgf
    gfgf
    dsds
    fdfd
    dfdsfs

    list切片,list的一种取值方式:
    nums=list(string.digits) #字符串强制类型转换为列表:[0,1,2,3,4,5,6,7,8,9]
    print(nums)
    print(nums[-6:-10:-1])#第二个冒号后边的值代表步长,每隔几个去一次,步长是负数的话,就是从右往左开始取值 结果:['4', '3', '2', '1']
    # # 步长为负
    # # 前面两个都不写:则取反
    # # 写第一个,第二个不写:从第一个向左取
    # # 写第二个,第一个不写:从第二个向左取
    # # 写两个:开始位置在结束位置的左侧:取不到
    # # 写两个:开始位置在结束位置右侧:从右往左取
    # #切片同样适用于字符串
    print(stus[1:3]) #顾头不顾尾,即取到1、2但不包含3,如果开始下标不写的话,从最前边开始写;如果后边下标不写的话。代表取到最后  结果:['ggfgf', 'gfgf']
    print(stus[-1])#-1代表最后一个元素 结果:dfdsfs
    print(stus[:])#开头下标和结尾下标都不写,代表取整个list 结果:['ffs', 'ggfgf', 'gfgf', 'dsds', 'fdfd', 'dfdsfs']

    3.元组:也是list,但是他是不可变的list
    cities=('beijing','shanghai') #一旦定义好就不能再变了
    print(cities[0]) 结果:beijing
    print(cities.count('beijing')) 返回出现次数,没有不报错。结果:1
    print(cities.index('beijing')) 返回下标,没有时报错。结果:0

    s='方法','苟富贵' #字符串定义好之后,也不能修改
    s[0]='fsds' 结果:报错字符串无法修改
    s='ffdfdfsdf' 结果:被修改,此方法是对s重新赋值
    s=s.replace('ff','') 结果:dfdfsdf
    4.字典
    非空即真,非0即真
    实现同样的功能,代码越少越牛逼
    a = []
    b =
    'niuhanyang' #not的意思是取反
    c = ()
    d =
    0
    e = None
    以上只有b是真的

    元组都是以key:valuekey:value的形式进行存储的,得到到了key值就可以获取到相应的value;并且字典都是无序的,字典的取值速度也优于list,因为key值是唯一的,不需要挨个查找
    jj={
    'name':'aa',
    'age':11,
    }
    #增加
    jj['qq']=1112555 在字典里增加 qq:1112555
    jj.setdefault('fdfds','个梵蒂冈') 字典里增加:fdfds:个梵蒂冈
    jj[
    'age']=33 已有此key值,更改此对应的value
    print(jj)
    jj.setdefault(
    'age','74') setdefault这种方式,如果key已经存在,那么就不会修改,key不存在的话就新增
    print(jj)
    #修改
    jj['qq']=11125551
    #删除
    jj.pop('qq') 删除的时候key不存在会报错
    del jj['age'] 删除的时候key不存在会报错
    #取值
    print(jj['name']) 取值的key不存在会报错
    print(jj.get('name','fdfd')) 取值的key不存在会返回none,后边指定值时,返回指定值
    jj.clear() 清空字典
    jj.popitem() 随机删除一个key值

    aa={'chouyan':'yibao'}

    jj.update(aa)
    把一个字典加入到另一个字典
    print(jj.keys())    结果:dict_keys(['name', 'age', 'chouyan'])
    print(jj.values()) 结果:dict_values(['aa', 11, 'yibao'])
    print(jj) 结果:{'name': 'aa', 'age': 11, 'chouyan': 'yibao'}

    for
    i in jj: #for i in jj:只能打印key值

    print(i)

    for k,v in jj.items(): 可打印出k,v

    print(k,v)
    ********************************************************
    练习:将xiaohong海淀的house变为5 info[
    1]['xiaohong']['house']['海淀']+=2
    info =  [
    {
    'xiaohei':
    {
    'money':10000,
    'cars':['Ben-z','audi','BMW'],
    'info': {
    'phone':186212312,
    'age':36,}
    }
    },
    {
    'xiaohong':
    {
    'house': {
    '朝阳':2,
    '海淀':3,
    '昌平':5
    },
    'lan':['ch','en','jp'],
    }
    }
    ]
    ****************************************
    高效循环字典的方式:
    d={'a':1,'b':2 }
    print(d.items()) 转换成了list,查询效率没有字典高 结果:dict_items([('b', 2), ('a', 1)])成为了两个元组
    for k in d:
    print(k,d.get(k)) 根据取到的key值,取到value 结果为:b 2 换行 a 1
    **************************************************************
    练习:统计学生交作业的情况
    data={
    'aa':{
    '2018-6-3':'未交',
    '2018-6-4':'已交',
    },
    'bb': {
    '2018-6-3': '未交',
    '2018-6-4': '已交',
    }
    }
    #1.判断名字和日期是否都填了
    #2.构造好小字典{data:status}
    #3.把构造好的小字典和以前那个合并到一起
    for i in range(5):
    name=input('name:').strip()
    date = input('date:').strip()
    status = input('status:').strip()
    if name and date:
    status='已交'if status else '未交' #三元表达式
    # if status:
    # status ='已交'
    # else:
    # status='未交'
    if name in data: #判断学生是否存在
    data[name][date]=status #如果已经存在,就加一个日期和状态
    else:
    tmp={date:status} #{'2018-1-4':'未交'}
    data[name]=tmp #再给大字典加一个学生 value是小字典
    print('添加之后的',data)
    else:
    print('姓名和日期必须写')

    5.文件读写
    #1.打开文件
    #2.读或者写
    #3.关闭文件
    f=open('111','w+',encoding='utf-8')      其中111为打开文件名,此文件在当前目录下时不需要路径,如果需要输入绝对路径时,格式为r'xxxxxxxxx',w+为文件打开方式,encoding='utf-8为字符集编码
    print('readline',f.readline()) #读取文件一行的数据
    print('readlines',f.readlines()) #获取文件中的所有数据,每一行的数据放到一个list里边
    print('read',f.read())#获取文件中的所有内容
    ************************************************************************
    names=['a','b','c','d','e']
    for name in names:
    f.write(name+'/n')
    f.writelines(names) #传一个list,把list每一个元素写入到文件中

    f.write('dsadsa')
    print(f.read()) 此时读取不到任何值,因为在写完之后,指针跑到了最后,将无法读取到任何值.


    只要和r相关的,文件不存在时会报错;只要是和w相关的文件内容都会被清空;r读模式时,每次指针都在最前边,w写模式的每次覆盖写完指针都会放到最后,a追加模式的在文本最后追加,完成后指针放到最后

    只读模式                      写模式                    追加模式
    r w a
    只能读 会覆盖以前的文件
    不能写 里边的内容,不能读
    文件不存在会报错 文件不存在时会新建一个

    读写模式 写读模式 追加读写模式
    r+ w+ a+
    打开不存在的文件报错 能读能写,不会清空以前的内容,文件不存在会新建
  • 相关阅读:
    Win8 iis 环境搭建
    Windows phone 8 触发器使用小结
    Windows Phone 页面之间参数传递方法
    日期SQL 脚本
    net 内存泄露和内存溢出
    Emacs的一些事情(与Vi的争议及使用)
    matlab与示波器连接及电脑连接
    msp430学习笔记-TA
    28个Unix/Linux的命令行神器
    linux在线中文手册
  • 原文地址:https://www.cnblogs.com/kuhaha/p/9148162.html
Copyright © 2011-2022 走看看