标签:python
http://www.noanylove.com/2014/10/centos-6-5-sheng-ji-python-he-an-zhuang-ipython/
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‘]
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)
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是说如果原来有这个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‘}
#!/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)
把字典转换成列表
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及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()方法用来直接读取字节到字符串中
读取一行
[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()内建方法功能与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.不要修改原始文件
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
原文地址:http://dailiang.blog.51cto.com/9484865/1834518