python 基础之第四天
阅读原文时间:2023年07月11日阅读:1

例子1:

打印列表每个元素对应的索引

[root@master script]# vim suoyin.py
#!/usr/bin/python

coding:utf-8

alist = ['fu','shan','hua','hive']

for i in range(len(alist)):
print '%s:%s' % (i,alist[i])

检验:
[root@master script]# python suoyin.py
0:fu
1:shan
2:hua
3:hive
另外一种方式:

[root@master script]# vim suoyin.py
#!/usr/bin/python

coding:utf-8

alist = ['fu','shan','hua','hive']

#for i in range(len(alist)):

print '%s:%s' % (i,alist[i])

for i in enumerate(alist):
print '%s:%s' %(i[0],i[1])

检验:
[root@master script]# python suoyin.py
(0, 'fu')
(1, 'shan')
(2, 'hua')
(3, 'hive')

[root@master script]# vim suoyin.py
#!/usr/bin/python
# coding:utf-8

alist = ['fu','shan','hua','hive']

#for i in range(len(alist)):
#  print '%s:%s' % (i,alist[i])

for i in enumerate(alist):
  print '%s:%s' % (i[0],i[1])

检验:

[root@master script]# python suoyin.py
0:fu
1:shan
2:hua
3:hive

还可以:

[root@master script]# vim suoyin.py
#!/usr/bin/python

coding:utf-8

alist = ['fu','shan','hua','hive']

for m,n in enumerate(alist):
print '%s:%s' % (m,n)

检验:
[root@master script]# python suoyin.py
0:fu
1:shan
2:hua
3:hive

#######列表一些简单用法############

In [10]: alist = [23,10,45,33]

In [11]: reversed(alist)
Out[11]:

In [12]: list(reversed(alist))
Out[12]: [33, 45, 10, 23]

In [15]: sorted(alist) #从小到大,升序
Out[15]: [10, 23, 33, 45]

In [16]: list(reversed(sorted(alist)))      #降序排列
  Out[16]: [45, 33, 23, 10]

或者:

In [18]: sorted(alist)[::-1]

Out[18]: [45, 33, 23, 10]

##########字符串格式化############

In [19]: '%10s%s' % ('name','fush') ##'%10s' 右对齐,占是个字符,不够的用空格补上;默认右对齐
Out[19]: ' namefush'

In [20]: '%10s %s' % ('name','fush')
Out[20]: ' name fush'

In [21]: '%-10s %s' % ('name','fush') ##'%-10s' 左对齐,占是个字符,不够的用空格补上

Out[21]: 'name      fush'

还有一种不常用的用法:

In [22]: '%*s %*s' % (-20,'name',-8,'fush') ##在s前面用*号,在后面用数字代替
Out[22]: 'name fush '

格式化案例:

[root@master script]# vim huamian.py
#!/usr/bin/python
# coding:utf-8

def get_content():
contents = []
while True:
data = raw_input(': ')
contents.append(data)
if not data:
break
return contents

if __name__ == '__main__':
width = 48
lines = get_content()
lines.pop()
print '+%s+' % ('#' * width)
for line in lines:
if not len(line)%2:
sp_width = (width -len(line)) / 2
print '+%s%s%s+' % (' ' * sp_width,line,' ' * sp_width)
else:
sp_width = (width -len(line)) / 2
print '+%s%s%s +' % (' ' * sp_width,line,' ' * sp_width)
print '+%s+' % ('#' * width)

改进版:

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

def get_content():
contents = []
while True:
data = raw_input(': ')
if not data:
break
contents.append(data)
return contents

if __name__ == '__main__':
width = 48
lines = get_content()
print '+%s+' % ('#' * width)
for line in lines:
sp_width , extra = divmod((width -len(line)),2)
print '+%s%s%s+' % (' ' * sp_width,line,' ' * (sp_width + extra))
print '+%s+' % ('#' * width)
备注:num1,num2 = divmod(10,2)
num1 = 10/2 的商
num2 = 10/2 的余数
奇数/2 的余数(num2=1)
偶数/2 的余数(num2=0)

验证效果:

[root@master script]# python huamian.py
: hello
: world!
:
+################################################+

  • hello +
  • world! +
    +################################################+

##########另外一种格式化#############

import string
data = 'hello $name,I will see you $day'
t = string.Template(data)
t.substitute(name='tony',day='afternoon')
'hello tony,I will see you afternoon'
t.substitute(name='herry',day='afternoon')
'hello herry,I will see you afternoon'

###########添加用户和密码以及发邮件通知案例#############

首先编写一个获取随机密码的文件:

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

import string
import random
import sys

def get_pass():
pwd = ''
for i in range(8):
char = random.choice(string.lowercase + string.uppercase + string.digits)
pwd += char
return pwd
if __name__ == '__main__':
print get_pass()

正式文件代码:

[root@master script]# cat adduser.py
#!/usr/bin/python

coding:utf-8

import sys
import os
import ranpass
import string

contents = """username: ${username}
password: ${password}

"""

t = string.Template(contents)

def adduser(user,pwd,email):
data = t.substitute(username =user,password = pwd)
os.system('useradd %s' % username)
os.system('echo %s |passwd --stdin %s' % (pwd,username))
os.system('echo -e "%s" |mail -s "user info" %s' % (data,email))

if __name__ == '__main__':
username = sys.argv[1]
pwd = ranpass.get_pass()
adduser(username,pwd,'root@localhost')

检验:

[root@master script]# chmod +x adduser.py
[root@master script]# ./adduser.py tiantian
useradd: user 'tiantian' already exists
Changing password for user tiantian.
passwd: all authentication tokens updated successfully.
[root@master script]# cat /var/spool/mail/root |more

From root@master.localdomain Fri Aug ::
Return-Path: root@master.localdomain
X-Original-To: root@localhost
Delivered-To: root@localhost.localdomain
Received: by master.localdomain (Postfix, from userid )
id 844AE22CD3; Fri, Aug :: + (CST)
Date: Fri, Aug :: +
To: root@localhost.localdomain
Subject: user info
User-Agent: Heirloom mailx 12.4 //
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: .844AE22CD3@master.localdomain
From: root@master.localdomain (root)

username: tiantian
password: GJh4t646

[root@master script]# mail
Heirloom Mail version 12.4 //. Type ? for help.
"/var/spool/mail/root": message new

N root Fri Aug : / "user info"
&
Message :
From root@master.localdomain Fri Aug ::
Return-Path: root@master.localdomain
X-Original-To: root@localhost
Delivered-To: root@localhost.localdomain
Date: Fri, Aug :: +
To: root@localhost.localdomain
Subject: user info
User-Agent: Heirloom mailx 12.4 //
Content-Type: text/plain; charset=us-ascii
From: root@master.localdomain (root)
Status: R

username: tiantian
password: GJh4t646

&