Day2 列表,字典,集合

1.模块:

  a. 模块sys  ,是python解释器自带的C语言编写的模块

import sys
print(sys.path)     #打印环境变量
print(sys.argv)     #打印相对路径,打印出来后面可以跟参数,然后根据参数选择进行相应操作。
print(sys.argv[2])

   b.模块os

import os
res = os.system("dir")          #os.system 只执行结果,输出结果到屏幕上,不保存结果
res2 = os.popen("dir").read()   #打开目录将结果存到一个内存地址上,再读出内容
print("-----",res2)

os.mkdir("new dir")             #创建新的目录

    c.调用自定义的模块,在同级目录下,直接import。不同级目录下,有2种方法:

      方法一:将自定义模块copy 至site-packages目录下,然后在程序中调用即可。

      方法二:后续。。。。

2.pyc文件:

  Python与Java一样,先编译后解释.PyCodeProject是程序执行结果,pyc文件是PyCodeProject的一种持续化保存方式。

  Python 的运行过程:

  • 执行hello.py
  • 编译结果保存在内存中的PyCodeProject中
  • Python运行结束,Python解释器将PyCodeProject写回到  .pyc文件中。
  • 当Python第二次运行时,先在硬盘中寻找pyc文件,如果py有更新,先比对py 与pyc更新时间,如果py 时间晚于 pyc文件,说明该程序有更新,需重新执行上述步骤,如果py时间等于pyc时间,则该程序无修改,可直接调用pyc.

3.Python 数据类型

      type(2**32)       #type表示查看数据类型,**表示幂次方

    1. int    Python 2.x有整形和长整型 (>63位),Python3.x不区分,全都是整形。
    2. 布尔值 真或假,1 或 0
    3. 字符串  

4.三元运算: result = 值1 if 条件 else 值2    

      #条件为真返回值1 ,假则返回值2

 

5.bytes与字符串转换

  

 

  

  

          

 6.列表  name = ["Dong","Xi","Nan","Bei","Zhong"]

 列表操作:

    • name[n,m]  #切片,取n到m-1 的连续的值,顾头不顾尾
    • name[-1]   #切片,在不知道列表长度的情况下,取出最后一个值
    • name[-2:]    #切片,在不知道列表长度的情况下,取出最后两个值
    • name[0:3] = name[:3]  #前面的0可以忽略
    • name.append("Tian")      #追加到最后一个位置
    • name.insert(x,"Di")          #插入到位置x,不能批量插入,只能一个一个插入
    • name[1]= ("Zhi")        #修改
    • name.remove("Dong")      #删除
    • del name[0]               #删除
    • name.pop()          #默认删除最后一个值
    • name.pop(1) = del name[1]
    • name.index("xxx")   #返回xxx在列表中的下标
    • name.count("xxx")  #计算xxx在列表中的个数
    • name.clear()           #清空列表
    • name.reverse()            #反转
    • name.sort()                  #排序
    • name.extend(name2)  #扩展,  将name 和name2合并,name2还存在。
    • name.copy()    # 深浅copy

 7.深浅copy

  浅copy:可用来创建联合账号。

  深copy

8.元组:与列表相似,不能修改,只能查找,切片,可简称为 不可变列表

  eg。 name = ("Dong","Xi","Nan","Bei")

  元组只有统计和获取下标两种方法。count,index.因为它一旦创建,便不能修改,所以叫只读列表。

9.字符串操作

name = "alex geng"
print(name.capitalize())    #首字母大写
print(name.count("e"))      #统计个数
print(name.center(20,"-"))  #-----alex geng------
print(name.endswith("s"))   #判断以什么结尾
print(name[name.find("a"):4]) #字符串切片

a = "my name is {name},my hobby is {hobby}"
print(a.format(name = "sera",hobby = "play"))           #格式化
print(a.format_map( {"name": "sera","hobby": "play"}))

print("aaa21".isalnum())   #判断是否是26个字母和数字
print("dong".isalpha())     #判断是否是纯英文字符
print("1A".isdecimal())     #判断是否是十进制
print("T1A".isidentifier())  #判断是否是合法标识符
print("1A".isspace())       #是否是空格
print("A Nname".istitle())  #是不是标题
print("aaa".isprintable())   #tty文件,drive file 不可打印。设备终端文件
print("*".join(["1","2","3"]))  #1*2*3
print("\naaa".lstrip())      #删除左边的空格和回车
print("\n       aaaaa      \n".strip())# 删除两边的空格和回车

p = str.maketrans("abcdef","123456")
print("alex geng".translate(p))     #替换

print("alex".replace('e',"a"))      #替换
print("alex".rfind("l"))            #找到最右面值的下标
print("a b c d e".rsplit())         #以某种标志分割字符串
print("alex LI".swapcase())         #ALEX li
print("alex".title())

 10.字典

   a.字典的增删改查

info = {
    "S1":"Dong",
    'S2':'Xi',
    'S3':'Nan',
    'S4':'rrr',
    'S5':'aaaa',
    'S6':'bbbb',
    'S7':'cccc',
}
print(info["S6"])   #以key值为索引查找value
print(info.get('S10'))  #有值返回值,没值返回None
print("S3" in info )    #确定某值在不在字典里,在2.x中是info.has_key('S3')
info["S1"] = "SHANXI"   #修改
print(info["S1"])
print(info)

info["S10"] = 'BEIJING' #创建
print(info)

del info["S2"]      #删除方法一
info.pop('S2')      #删除方法二
info.popitem('S2')  #随机珊瑚
print(info)

   b.字典多级嵌套

 

 11.集合(set)  是一个无序的、不重复的数据组合。

   1.去重    ---把一个列表编程集合,就自动去重。

   2.关系测试  --测试两组数据之间的交集,差集,并集等关系。

eg.将列表变为集合:

list_1 = [1,2,3,5,5,7,8,8]
list_1 = set(list_1)

print(list_1,type(list_1))

 集合的操作

#交集
print(list_1.intersection(list_2))
#并集
print(list_1.union(list_2))
#差集
print(list_1.difference(list_2))
print(list_2.difference(list_1))
#子集
list_3 =set([1,2])
print(list_3.issubset(list_1))
print(list_1.issuperset(list_3))
#对称差集
print(list_1.symmetric_difference(list_2))

 Isdisjiont

list_4 = set([2,100])
print(list_4.isdisjoint(list_2)) # 当list_4和list 2没有关系时,则返回true

 集合操作

 a = t | s  #并集
 b = t & s  #交集
 c = t - s  #差集
 d = t ^ s  #对称差集(去除双方都有的值)
 t.add("xxx")   #添加一项
 t.update("xx","ss","aaa")  #添加多项

 len(s)     #长度
x in a  #列表,字典,集合,字符串中
list_1.remove("h")   #删除指定值,如果值不存在,会报错
list_1.pop()    #删除,但无法指定
list_1.discard() #删除指定值,如果值不存在,不会报错

 

 12.文件操作

    a.写    

ata =open("yesterday",encoding = 'utf-8').read()
f = open("yesterday",'a',encoding= 'utf-8') #文件句柄(文件内存对象),包含文件名,内存起始位置,文件大小,字符集
    #'w' 新建
    #'a' = append   追加
f.write('\n我爱北京天安门.....,\n')
f.write('天安门上太阳升.....')

    b.单行读取

for i in range(10):
    print(f.readline())

    c.多行读取

#下面这种方法low,整个文件占据内存,消耗大

for index,line in enumerate(f.readlines()):
    if index ==9:
        print('-------分割线-----')
        continue
    print(line.strip())

 

#下面这种方法只有每一行占据内存,效率高
count = 0
for line in f:
    if count == 9:
        print('---------分割线-')
        count += 1
        continue
    print(line.strip())
    count +=1

 

   d.光标返回

print(f.tell()) #按字符来计数,返回光标所在值 
f.seek(0) #将光标回到指定位置

   e.flish  

    eg,进度条

import sys,time
for i in range(50):
    sys.stdout.write('#')
    sys.stdout.flush()
    time.sleep(0.1)

   f.  

print(f.encoding)
print(f.fileno())  #返回文件在内存中的编号
print(f.name)       #返回文件名
print(f.isatty())   #是否是终端,eg 打印机
print(f.seekable()) #光标可返回,则为true
print(f.flush())    #刷
f.colse     #关闭文件
f.closed()  # 判断文件是否关闭
f.truncate(10) #截断

 g.文件操作

  'r'  读

  'w'  写,(如果本来有这个文件,直接覆盖,新建,所以要备份),

  'a'  追加

  'r+'  读写,可以打开读取并追加,最常用,(3.0上,r+只能写到文件最末尾)

  'w+'  写读,不常用

  'a+'  追加读写,只能在最后加

  'rb'  二进制文件,eg 视频文件是二进制格式   b'-----',b表示bytes。使用场景:1.网络传输,2.二进制文件

      在python3.0里都是bytes格式。写的时候需要加encodeing,指定文件格式。跨平台的时候最好用二进制(linux->windows),视频、字符流也最好用二进制。

 i.文件修改:

  1.vim,将文件存到内存修改

  2.修改完文件另存为一个新文件

13.with语句

  为了避免打开文件后忘记关闭,使用with,即:

  with open('file_name','r',encoding = 'utf-8') as f ,\

    open('file_name2','r',encoding = 'utf-8') as f2 :

    .....

14.python 一行代码一般不超过80个字符

15.文件编码:

  Python 2.0x上默认的文件编码是ASIC码,ASIC不支持中文,所以中国有了GB2312.

  UTF-8 是UniCode的一个扩展集。UniCode是万国编码,包含各个国家的编码。Windows默认的中国软件编码是GBK。GBK向下兼容GB2312.

  ASIC码:占一个字节

  UTF-8: 英文字符占1个字节,中文字符占3个字节,UTF8 是可变长的。

  UniCode:占2个字节

  GBK----------(decode)-------->UniCode------(encode)------------->UTF-8

  Python 3.0默认编码是Unicode

 

posted @ 2017-08-18 10:37  耿耿824  阅读(203)  评论(0)    收藏  举报