码迷,mamicode.com
首页 > 编程语言 > 详细

python之路二

时间:2016-08-05 01:12:54      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:python

一.ipython安装教程

http://www.noanylove.com/2014/10/centos-6-5-sheng-ji-python-he-an-zhuang-ipython/

random

rc = ["石头","剪刀","布"]

for i in rc: print(rc.index(i),i)

颜色

颜色: 31是红色,32 是绿色 \033[31;1m内容\033[0m \033[31;1m内容\033[0m

3十几是前景色,40十几是背景色 \033[31;44;1m内容\033[0m 多写就好啦

二.列表

#!/usr/bin/env python
# -*- coding: utf-8 -*-
names = ["dailiang","guanjianyu","zhouxinyu"]

列表索引/下标

你可以通过索引/下标 来找到列表中每个元素的位置,记住索引是从0开始的 >>> names[0] #打印第一个下标 ‘dailiang‘

>>> names[1]  #打印第二个下标
‘guanjianyu‘

>>> names[-1]
‘zhouxinyu‘ #-1是最后一个变量

切片(顾头不顾尾)

你可以从列表中取出多个指定元素,这种操作叫切片

>>> names[0:1]
[‘dailiang‘]

>>> names[0:2]
[‘dailiang‘, ‘guanjianyu‘]

>>> names[0:3]
[‘dailiang‘, ‘guanjianyu‘, ‘zhouxinyu‘]

>>> names[1:3]
[‘guanjianyu‘, ‘zhouxinyu‘] 

>>> names[:-2]  #代表取0至倒数第二个,但是倒数第二个不显示
[‘dailiang‘]

列表中追加元素append,

In [2]: names.append("linan")
In [3]: names
Out[3]: [‘dailiang‘, ‘guanjianyu‘, ‘zhouxinyu‘, ‘linan‘]

插入

In [4]: names.insert(1,"zhangfenglai1")
In [5]: names
Out[5]: [‘dailiang‘, ‘zhangfenglai1‘, ‘guanjianyu‘, ‘zhouxinyu‘, ‘linan‘]

备注:你想在哪个索引位置插,就写哪个数字

修改

names [0] = ‘dailiang02‘

删除

names = ["dailiang","guanjianyu","zhouxinyu"]



del names[0]
或者  
names.remove("dailiang")
删除最后一个值
names.pop()

扩展(表与表的扩展与合并)

names = ["dailiang","guanjianyu","zhouxinyu"]

names02 = ["linshenwu","zhangfenglai","huqi"]

names.extend(names02)
[‘dailiang‘, ‘guanjianyu‘, ‘zhouxinyu‘, ‘linshenwu‘, ‘zhangfenglai‘, ‘huqi‘]

拷贝

names = ["dailiang","guanjianyu","zhouxinyu"]
lalal = names.copy()
这样lalal的内容就与names.copy一样了

获取长度

>>> len(names) #通过len()内置函数可以查看列表中元素的个数
3

统计

names.count("guanjianyu")
1

备注:这个可不是用来统计下标的,是统计这个列表list有几个guanjianyu

排序

names = ["dailiang","guanjianyu","zhouxinyu","linshenwu","linan"]

names.sort()
排序后:
[‘dailiang‘, ‘guanjianyu‘, ‘linan‘, ‘linshenwu‘, ‘zhouxinyu‘]

反转排序
names.reverse()

获取下标:

names.index("zhouxinyu")
0

例子:

In [9]: alist = ["l","la","lal"]

In [10]: for i in (alist) : print( alist.index(i),i)
0 l
1 la
2 lal

三.元组

元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表

yuanzu = (‘dailiang‘, ‘zhouxinyu‘, ‘linshenwu‘)

元组只有两个方式,一个是count,一个是index,完毕

四.购物车

这写既然都学完了,那么我们写一个购物车程序:

要求: 1.用户输入薪资,就会列出产品列表 2.用户根据商品编号选择商品,选择商品加入到已买列表中,并监测余额 3.退出打印已买商品列表,打印出已买list和余额

缩进可能会有问题,不要照着抄,要自己写啊

#!/usr/bin/env python
# -*- coding: utf-8 -*-

product_list = [
("iphone",5800),
("mac Pro",9800),
("bike",800),
("watch",10600),
("coffee",31),
("python",81)
]
shopping_list = []
salary = input("please input your salary: ")
if  salary.isdigit():
    salary = int(salary)
    while True:
        for i in product_list :
            print (product_list.index(i),i)

        user_choice = input("which you want to buy :")
        if user_choice.isdigit():
            user_choice = int(user_choice)
            if user_choice < len(product_list) and  user_choice >= 0 :
                p_i = product_list[user_choice]
                if p_i[1] <= salary:
                    shopping_list.append(p_i)
                    salary -= p_i[1]
                    print("added %s to your shopping cart, your current balance is \033[31;1m%s\033[0m " %(p_i[0],salary))
                    #     \033[32;1m内容\033[0m   32是绿色,31是红色
                else:
                    print("你的钱只剩\033[31;1m %s \033[0m 了,不够啊,买毛线%s啊" %(salary,p_i[0]))
            else:
                print("商品信息%s不存在" %(user_choice))


        elif user_choice == "q" :
            print("-----------------\033[31;1m您的购买清单是\033[0m------------")
            for p in shopping_list :
                print(p)
            print("\033[31;1m你的余额是\033[0m",salary)
            exit()
        else :
            print("invaild options")
else :
    print( "please insert into numbers")

五、字典操作

字典是一种"key-value"的数据类型,使用就像我们上课使用的字典,通过笔画、字母来查对应页的详细内容

#!/usr/bin/env python
# -*- coding: utf-8 -*-
info = {
"stu01" : "dailiang",
"stu02" : "guanjianyu",
"stu03" : "zhouxinyu",
"stu04" : "linan"
}

print(info)

查,永远使用的是key值取出value,但是不可以根据value取key

print(info["stu01"]) #这是根据key取出一个value
#print(info["dailiang"]) #但是不可以根据value取key

#print(info["stu05"]) #但是如果字典里面没有这个key,会报错的keyerror

print(info.get("stu05")) #推荐这个,如果没有不会报错,会返回None,一般推荐这样写

#判断一个key是不是在字典里
print("stu03" in info)
#返回值为True

改/增

info["stu02"] = "武藤兰"  #修改字典里的值,如果存在就会去修改,如果不存在就会去创建

info["stu05"] = "苍井空"  # 如果不存在就会去创建


print(info)
#{‘stu04‘: ‘linan‘, ‘stu02‘: ‘武藤兰‘, ‘stu05‘: ‘苍井空‘, ‘stu01‘: ‘dailiang‘, ‘stu03‘: ‘zhouxinyu‘}

#两种删除方法del与字典.pop
del info["stu01"]
print(info)
#{‘stu04‘: ‘linan‘, ‘stu05‘: ‘苍井空‘, ‘stu03‘: ‘zhouxinyu‘, ‘stu02‘: ‘武藤兰‘}

info.pop("stu02")
print(info)

#info.pop("zhouxinyu")  #info.pop只能删除key值啊
#print(info)

.setdefault()

字典里的setdefault是说如果原来有这个key值,就把默认值返回,如果没有这个key值,那就创建一个新的key,并赋值
#info.setdefault()
info.setdefault("stu01","huqi")
print(info)
{‘stu04‘: ‘linan‘, ‘stu01‘: ‘dailiang‘, ‘stu03‘: ‘zhouxinyu‘, ‘stu02‘: ‘guanjianyu‘}


info.setdefault("stu05","huqi")
print(info)
{‘stu04‘: ‘linan‘, ‘stu01‘: ‘dailiang‘, ‘stu05‘: ‘huqi‘, ‘stu03‘: ‘zhouxinyu‘, ‘stu02‘: ‘guanjianyu‘}

.update 合并字典

#!/usr/bin/env python
# -*- coding: utf-8 -*-
info = {
"stu01" : "dailiang",
"stu02" : "guanjianyu",
"stu03" : "zhouxinyu",
"stu04" : "linan"
}

a = {
"stu06" : "zhangfenglai",
"stu07" : "lalala"
}


info.update(a)
print(info)
{‘stu06‘: ‘zhangfenglai‘, ‘stu01‘: ‘dailiang‘, ‘stu07‘: ‘lalala‘, ‘stu04‘: ‘linan‘, ‘stu02‘: ‘guanjianyu‘, ‘stu03‘: ‘zhouxinyu‘}

备注:合并字典,如果有就创建,没有就删除

六、多级字典

#!/usr/bin/env python
# -*- coding: utf-8 -*-
av_catalog = {
    "应用" : {
    "linux" : ["zookeeper","kafka"],
    "nginx" : ["rewrite","locate"],
    "tomcat": ["JVM","OPTS"],
    },

    "硬件" : {
    "存储·" : ["硬盘","raid"],
    "管理" : ["远程管理","ilo"],
    "冗余": ["绑定","bond"],
    },

    "数据库" :{
    "mysql":["备份","mysqldump"],
    "sqlserver":["管理","SQL客户端"],
    },

}

是不是乱了???是不是不知道自己写的是什么??

记住下面几个小区别

元组:()  

列表:[]  

字典{}

如果我要修改冗余项,想修改bond为 etrunk

av_catalog["硬件"]["冗余"][1] = "etrunk"

字典查找key值就是用[],就是["硬件"],["冗余"]

列表查找用下标了,就是[1]

print(av_catalog)

.items()

把字典转换成列表

print(info.items())
dict_items([(‘stu01‘, ‘dailiang‘), (‘stu03‘, ‘zhouxinyu‘), (‘stu07‘, ‘lalala‘), (‘stu04‘, ‘linan‘), (‘stu02‘, ‘guanjianyu‘), (‘stu06‘, ‘zhangfenglai‘)])

字典的循环

字典的循环其实与列表的循环是一样的

列表的循环:

    for i in product_list :  

        print (product_list.index(i),i)

字典的循环:

    for i in info :
        print (i,info[i])

三级菜单

data = {
    ‘北京‘:{
        "昌平":{
            "沙河":["oldboy","test"],
            "天通苑":["链家地产","我爱我家"]
        },
        "朝阳":{
            "望京":["奔驰","陌陌"],
            "国贸":{"CICC","HP"},
            "东直门":{"Advent","飞信"},
        },
        "海淀":{},
    },
    ‘山东‘:{
        "德州":{},
        "青岛":{},
        "济南":{}
    },
    ‘广东‘:{
        "东莞":{},
        "常熟":{},
        "佛山":{},
    },
}

文件对象读取open

open及file内建函数 作为打开文件之门的"钥匙",内建函数open()以及file()提供了初始化 输入/输出(I/O)操作的通用接口

成功打开文件后时候会返回一个文件对象,否则引发一个错误

文件对象访问模式

r 以只读方式打开(文件不存在则报错) w 以写方式打开 (文件存在则&清空,文件不存在则创建) a 以追加模式打开(必要时创建新文件) r+ 以读写模式打开(参加r+) w+ 以读写模式打开(参见w) a+ 已读写模式打开(参见a)

b :windows下需要加一个b,比如rb wb等

第一个例子:

1.先open一个文件
f = open("/etc/hosts")  #如果open后面不加东西的话,默认是以 f = open.("/etc/hosys","r")模式打开
2.读文件数据
data = f.read()        
print(data)
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
3.关闭文件
f.close()  #关闭文件

为什么要关闭呢?? 因为读文件需要指针,读完一行,指针就会放到第二行,下次你再次读取就会从第二行开始读,这样就读不全,所以我们重复读 一个文件就需要把先把文件 f.close()

read方法

read()方法用来直接读取字节到字符串中

readline方法

读取一行

例子总结

[root@192 ~]# vim /etc/passwd 
1 root:x:0:0:root:/root:/bin/bash  
2 bin:x:1:1:bin:/bin:/sbin/nologin   
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin  
4 adm:x:3:4:adm:/var/adm:/sbin/nologin  
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin  
6 sync:x:5:0:sync:/sbin:/bin/sync  
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown  
8 halt:x:7:0:halt:/sbin:/sbin/halt  
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin  
10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin  
11 operator:x:11:0:operator:/root:/sbin/nologin
12 games:x:12:100:games:/usr/games:/sbin/nologin

上图是这个文件:

f= open("/etc/passwd")

f.read(10)  #只读10个字节
‘root:x:0:0‘ 

f.readline() #一行一行的读,每次读一行
‘:root:/root:/bin/bash\n‘

f.readlines() #把指针后面所有的读出来,以列表的形式

例子:

f= open("/etc/hosts")
f.readlines()
[‘127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4\n‘,
‘::1         localhost localhost.localdomain localhost6 localhost6.localdomain6\n‘]
可以看到是以列表的形式读出来的啊

文件迭代:

如果需要逐行处理文件,可以结合for循环迭代文件

f = open("/etc/hosts") 
for i in f :  print (i)

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

文件输入write()

write()内建方法功能与read()和readline()功能相反,它把含有文本数据或者二进制数据块的字符串写入到文件爱你中去 写入文件时,不会自动添加行结束符或者换行符,需要程序员自己手动添加

下面我们来做一个写操作的例子

linux操作系统进入到/opt 打开python 执行

f = open("a.txt")
---------------------------------------------------------------------------                       
FileNotFoundError: [Errno 2] No such file or directory: ‘a.txt‘

发现报错,因为** open("文件") = open("文件","r") **,r是文件不存在则无法创建
所以我们要换一种方式来
f = open("a.txt","w") 这样进入/opt 目录发现创建了a.txt这个文件
执行

f.write("111\n222\n")
f.flush() #这样就会写入磁盘啦,你就可以在文件中看到啦
111
222


writelines参数需要你使用列表的形式才行,上面readlines也是以列表形式输出
f.writelines(["2222\n","33333\n"])



f.read()
---------------------------------------------------------------------------
UnsupportedOperation: not readable
发现报错,因为创建时w 权限,只可以写不可以读

ok,那么现在问题来了
如果我以f = open ("文件","r") 的方式打开文件不能写入
如果我以f = open("文件","w")的方式打开文件则会清空原文件
如果我想要在文件后面追加呢???

a 以追加模式打开(必要时创建新文件)
a+ 已读写模式打开(参见a)

文件操作总结

这里不做详细介绍了,直接上例子

模拟cp操作: 1.创建~/bin/cp.py 文件
2.将/bin/ls "拷贝到"/root/ 目录下 
3.要求读取/bin/ls 后,每次读取4096字节,依次写入到新文件
4.不要修改原始文件

!/usr/bin/env python

coding: utf8

import sys import os f = open("cp.py","a") b = open("/etc/hosts","r") while True: c = b.read(4096) if c: f.write(c) f.flush() else: break

f.close() b.close()


python之路二

标签:python

原文地址:http://dailiang.blog.51cto.com/9484865/1834518

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!