zip()“拉链”方法

1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 print(list(zip(('a','b','c'),(1,2,3))))
4 p={'name':'alex','age':18,'gender':'none'}
5 print(list(zip(p.keys(),p.values())))
6 print(list(zip('hello','12345')))
7 print(list(zip(['c','y'],'12')))
8 #zip两个参数都是序列,序列类型包括元组、列表、字符串。

输出

[('a', 1), ('b', 2), ('c', 3)]
[('name', 'alex'), ('age', 18), ('gender', 'none')]
[('h', '1'), ('e', '2'), ('l', '3'), ('l', '4'), ('o', '5')]

[('c', '1'), ('y', '2')]

 

max和min高级使用

max函数处理的是可迭代对象,相当于一个for循环去除每个元素(必须是同类型的)进行比较;每个元素间进行比较是从每个元素的第一个位置依次比较,如果这一个位置分出大小,后面的就不需要比较了,直接得出这两个元素的大小。

1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 age_dic={'alex_age':18,'wupeiqi_age':20,'zsc_age':100,'lhf_age':30}
4 for item in zip(age_dic.values(),age_dic.keys()):
5     print(item)
6 print(list(max(zip(age_dic.values(),age_dic.keys()))))

输出

(18, 'alex_age')
(20, 'wupeiqi_age')
(100, 'zsc_age')
(30, 'lhf_age')
[100, 'zsc_age']

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 people=[
 4         {'name':'alex','age':1000},
 5         {'name':'wupeiqi','age':10000},
 6         {'name':'yuanhao','age':9000},
 7         {'name':'linhaifeng','age':18}
 8         ]
 9 print(max(people,key=lambda dic:dic['age']))    #下面操作和这句等效
10 # ret=[]
11 # for item in people:
12 #   ret.append(item['age'])
13 # print(ret)
14 # print(max(ret))

输出

{'name': 'wupeiqi', 'age': 10000}

 

  内置函数(续)

  ord()字符转ASCII码

  pow()两个参数时表示第一参数的第二参数次方;三个参数的时候表示次方结果对第三参数取余。

  reversed()对列表进行反转

  slice()切片  如s=slice(1,4,2),则s.start为1,s.stop为4,s.step为2。

1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 l='hello'
4 s1=slice(3,5)
5 s2=slice(1,4,2) #第三个参数是步长
6 #print(l[3:5])  #这种是硬编码,写的越多,可读性会越来越差。
7 print(l[s1])
8 print(l[s2])

输出

lo

el

  sorted()排序,本质就是在比较大小,默认从小到大(加reverse=True的时候从大到小)

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 name_dic={
 4     'abyuanhao':11900,
 5     'alex':1200,
 6     'wupeiqi':300
 7 }
 8 print(sorted(name_dic))
 9 print(sorted(name_dic,key=lambda key:name_dic[key]))
10 print(sorted(zip(name_dic.values(),name_dic.keys())))

输出

['abyuanhao', 'alex', 'wupeiqi']
['wupeiqi', 'alex', 'abyuanhao']
[(300, 'wupeiqi'), (1200, 'alex'), (11900, 'abyuanhao')]

  str()

  sum()

  type()  另外:写程序就是处理状态的变化

1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 msg='123'
4 if type(msg) is str:
5     msg=int(msg)
6     res=msg+1
7     print(res)

输出

124

  vars()

#!/usr/bin/env python
# -*- coding:utf-8 -*-
def test():
    msg='sdfasd'
    print(locals())
    print(vars())   #vars内不加参数,表示局部变量,返回字典
test()
print(vars(int))    #vars内有参数,查看某对象下所有方法,返回字典

输出

{'msg': 'sdfasd'}
{'msg': 'sdfasd'}
{'__repr__': <slot wrapper '__repr__' of 'int' objects>, '__hash__': <slot wrapper '__hash__' of 'int' objects>, ...}

  __import__()  # 模块就是一个py文件写了个py'test.py',import test  test.say_hi() (import不能导入字符串)  想导入字符串类型,用__import__,module_name='test' m=__import__(module_name) m.say_hi()  导入一切东西到操作系统底层都变成字符串  import----->sys------>__import__()

 

文件操作的其他模式

  文件处理流程

    1.打开文件,得到文件句柄并赋值

    2.通过句柄对文件进行操作

    3.关闭文件

Windows操作系统下,假设当前路径下有个文件叫做陈粒,是个文本文件 

f=open('陈粒',encoding='utf-8')  #句柄  跟操作系统要了一个渔网,文件是个鱼  #打开的时候是解码过程  

data=f.read()  #渔网捞鱼

f.close()  #渔网回收

print(data)  

硬盘上是二进制存数据,字符串到二进制需要编码,pycharm默认编码格式utf-8

Windows系统默认编码格式是GBK

  文件打开模式

r只读(默认模式,文件必须存在,不存在则抛出异常)

w只写(不可读,不存在则创建,存在则清空内容)

a追加(可读,不存在则创建,存在则只追加内容)

x只写(…存在则报错)

r+可读且可写  从文件开头开始覆盖

文件没有修改一说,只有数据覆盖。硬盘中加载到内存中在内存的操作可以有修改,但是回到硬盘上还是覆盖操作。

默认打开模式,只读  f=open('陈粒','r',encoding='utf-8')

    方法

    ——r模式

    read()一下读全部

    readable()

    readline()一次读一行,没行了就读空行了,一个程序中多次调用print(f.readline(),end='')是不会每次重新开始的,是接着上一次继续读,另外里面最后有个end等于空字符串是为了让程序结束之后不自动换行。

    readlines()读完输出大概是['...\n','...\n','...\n','...\n','...\n']

    ——w模式(无论怎样都相当于新建空文档覆盖原来的东西)

    写的时候得自己加换行符才能换行;文件内容只能是字符串,读文件读出的内容也全都是字符串

    write()  例如f.write('1\n') f.write('2\n') f.write('3\n')

    writable()

    writelines()  例如f.writelines(['1\n','2\n','3\n'])  和write的例子效果一样

    【with语句】

1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 with open('a.txt','w')as f:
4     f.write('1111\n')
5 #文件内容覆盖另一个文件
6 with open('aaa','r',encoding='utf-8')as src_f,\
7         open('aaa_new','w',encoding='utf-8')as dst_f:
8     data=src_f.read()
9     dst_f.write(data)

 

rb(底层处理的时候是二进制处理)以二进制的方式打开文件,只是文件处理的时候是二进制处理,最后显示的时候不是二进制。rb对Linux没有任何用处,因为Linux当中有个概念:一切皆文件,文件都是用二进制处理的。涉及跨平台。

 

文件修改操作实际是这样的:老文件中的内容读到内存中修改之后存到新文件中,最后新文件文件名覆盖原文件。

 

 

 

    

 

 

posted on 2018-09-18 16:34  阿缘要努力变强  阅读(151)  评论(0编辑  收藏  举报