手记

python基础

python语言  + 模块

数据分析,人工智能,机器学习,网站,科学计算

命令+shell语法格式

python【数据分析,网站,电影,书】

win  python
linux python
调用模块【积木】

Linux

python[空格或tab是必需]

python[模块{10功能}]

import  os
os.chmod('ttt.py',777)

os.chmod('/root/abc.txt',0777)

i=12344334
i=0232
i=0x33
i=ob1010
i=1.3
i=9999999999999999999999999999

i="abc"
i='abc'
i='''abc'''

变量赋值:
1.数字
ab=1
ab=99999999999999999999
ab=3.333
ab=0777    (8进制)
ab=0xff         (16)
ab=0b010101  (2)

2.字符
ab="abc"
ab='ab'
ab='''abcc'''
a[1]
a[1:-1]
a[:4]
a[4:]
print a+b
print a*20

3.变量可以是列表
a=['tom',122,'test',34]

a[0]                        提取a列表中的第0个值
a[1]
a[:3]                       提取a列表中的第0到第2值(3-1=2)
a[3:]
tom in a                判断tom是否在a变量中
'nihao' in a        判断nihao是否在a变量中

a.append('xxx')     向列表a中追加值
a.remove(122)           从列表a中删除122的值

4.变量可以是元组,不可修改的列表
ab=('tom',22,'hehe')
ab[0]
ab[1]
'tom' in ab             判断tom是否在ab变量中

5.字典
toms={'name':'tom','age':22,'sex':'male'}
注意事项:字串一定需要【引号】

toms                        #提取所有的值
toms['name']        #提取toms字典中name的值
toms['age']=18  #修改toms字典中age的值
toms['qq']=1111 #新建toms字典中qq以及它的值

==  !=   >=   <=   >   <

案例:
1.读取用户输入信息,赋值给变量
user=raw_input("提示:")
passwd=raw_input("提示:")

2.判断:
如果用户名是bob,密码是123456,则提示成功
否则提示失败

提示:#coding:utf-8
提示:and逻辑并且,相当于shell【&&】
if  判断1    and   判断2

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

user=raw_input("请输入用户名:")
passwd=raw_input("请输入用密码:")

if  user=='bob' and  passwd=='123456':
print "成功"
else:
print "失败"

score=raw_input("请输入成绩:")
if  score > 90:
print "A"
elif  score > 80:
print "B"
elif  score > 70:

vim a.py
import  random
num=random.randint(1,100)

if 判断:
指令

if  判断:
指令
else:
指令

语法格式
while 判断:
指令1
指令2
...

用python计算1..100的和
1+2+3+4+5+6...+100
提示1:变量控制循环次数i
提示2:变量求和sum
提示3:i+=1 (i=i+1)等同于shell中的i++

#!/usr/bin/python
#coding:utf-8
i=1
sum=0
while i <= 100:
sum=sum+i
i+=1
print "总和是:",sum
print "总和是%d" %sum

备注:%s代表字符(string),%d代表数字(digit)

for和while都支持break和continue

读取用户输入,直到输入tom为止
#!/usr/bin/python
#coding:utf-8

while True:
user=raw_input("请输入内容:")
if  user == 'tom':
break

用python计算1..100中2的被数的和
2+4+6+8+10+12....
提示1:变量控制循环次数i
提示2:变量求和sum
提示3:i+=1 (i=i+1)等同于shell中的i++
提示4:(i%2)==0  判断是否整除
提示5:需要continue

i=0
sum=0
while i <= 100:
i+=1
if (i%2!=0):  
continue
sum=sum+i
print "总和是:",sum

语法格式:
for  变量  in  值:
指令1
指令2

for  i  in  range(1,11):
print "我是%d" %i
else:
print "ok"

提示:range(1,11)自动生成1..10的数字
提示:range(1,11,2)自动生成1..10的数字(步长为2)

range(100000)
xrange(100000)

打印斐波那契数列:0  1   1   2   3   5   8  ...

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

fibs=[0,1]
n=int(raw_input("请输入几组:"))
for i in range(n-2):
fibs.append(fibs[-1]+fibs[-2])
print fibs

列表解析【快速生成列表变量】
['192.168.4.%d'%i for i in range(1,255)]

[ 10+i for i in range(100)]

文件操作:
open('文件名','权限')

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

abc=open('/etc/hosts')  打开文件
abc.readline()                  读取文件中的一行
abc.readline(6)                 读取文件中的6个字符
abc.read()                          读取文件的剩余全部
abc.seek(0)                         重新定位文件的位置
abc.close()                         关闭文件

data=open('/root/new.txt','w')  新建文件
data.writelines("hello the world\n")   写入数据(在内存)
data.writelines("ni chi le ma\n")           写入数据(在内存)
data.flush()                    写入硬盘
data.close()                    关闭文件

使用循环读取文件内容:
data=open('/etc/hosts')
for i in  data:
print i

模拟cp操作,将/root/new.txt复制为new2.txt
提示1:循环读取第一个文件每行
提示2:将读取出来的内容写入第二个文件
data1=open('/root/new.txt')
data2=open('/root/new2.txt','w')
for  i  in  data1:
data2.writelines(i)
data1.close()
data2.close()

Python调用shell命令:

import subprocess
subprocess.call('ls /',shell=True)

++++++++++++++++++++++++++++++++++

Python定义函数格式
define定义

def  函数名称(形参):
指令1
指令2

Python调用函数格式
函数名(实参)

def   ad():
print 3+4
-->定义函数

ad()                                            --->调用函数
tt=ad()
print tt                                    ---->返回None

def ad()
i=3+4
return i                        --->返回数据

tt=ad()                                 --->tt的值是7
print tt

def  ad(x,y):           x和y形式参数
print x+y
print x*y

ad(1,2)                     1和2实际参数
ad(8,5)
ad(7,9)

默认参数
def  ad(x=3,y=5):           x=3和y=5是默认参数
print x+y

ad()                                    使用默认参数3和5
ad(8,15)                            使用自定义参数8和15

如何取读取python脚本的参数
#!/usr/bin/python
#coding:utf-8

import sys
print sys.argv
print sys.argv[0]
print sys.argv[1]
print sys.argv[2]
print len(sys.argv)

#vim  tt.py                     新建模块
def ad(x=3,y=5):
print x+y

def reduce(i,j):
print i-j

#python
import tt                           调用模块
tt.ad()                             使用模块中的函数
tt.ad(8,9)                      使用模块中的函数
tt.reduce()                     失败
tt.reduce(8,2)

#python
from tt  import  ad   从abc模块中导入ad功能
ad()

import string
string.digits
string.letters

生成8为随机密码
#!/usr/bin/python
#coding:utf-8

import random,string
passwd=''
mypass=string.digits+string.letters
for i in range(8):
passwd=passwd+random.choice(mypass)

print passwd

try:
指令
except 错误类型:
print "错误提示内容"

try:
num=int(raw_input('请输入数字:'))
except:                                 //有错误才执行//
print "错误"
else:                                       //没有错误才执行//
print num
finally:                                //有没有错误都执行//
print "程序结束"

with open('/etc/hosts') as data:
data.readline()
data.readline()
with语句结束后会自动关闭文件,不需要手动close()

自定义报错信息:ValueError
raise

断言:assert

正则表达式
m=re.match('the','hello the world')
从开始匹配,在数据中找the
找到返回Match,否则返回None
m.group()   #查看找到的匹配值

m=re.search('the','hello the world')
在整个数据的任意位置中找the,仅找第一个匹配
找到返回Match,否则返回None
m.group()   #查看找到的匹配值

m=re.findall('the','hello the a the world')
在整个数据的任意位置中找the,找全部的匹配
找到返回Match,否则返回None
m.group()   #查看找到的匹配值

统计Apache访问日至
1.统计每个客户端访问次数

/var/log/httpd/access_log
#!/usr/bin/python
#coding:utf-8
import re                   #导入正则模块
z='Firefox'       #匹配IP地址
dica={}                      #空字典
data=open('access_log')     #读取文件
for i in data:              #循环文件每一行
m=re.search(z,i)        #在每行中匹配IP
if m:
ip=m.group()            #把匹配的IP提取出来
dica[ip]=dica.get(ip,0)+1
print dica

for i in {1..254}
do
ping -c2 -i 0.2 192.168.4.$i &>/dev/null
if [ $? -eq 0 ];then
echo "192.168.4.$i is up"
else
echo "192.168.4.$i is down"
fi
done

import subprocess
for i in range(1,255):
m=subprocess.call('ping -c2 192.168.4.%s &>/dev/null'%i,shell=True)      
if m:
print "192.168.4.%s is down"%i
else:
print "192.168.4.%s is up"%i

CPU--IO

    ping -c2 192.168.4.1

网卡--------------------------------------------------------->网卡0.1s
<----------------------------0.1s
0.000000001 CPU等
0.000000001 CPU返回结果:通的

ping -c2 192.168.4.2

网卡--------------------------------------------------------->网卡0.1s
<----------------------------2s
0.000000001 CPU等

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

import subprocess
import threading
def myping(ip):
m=subprocess.call('ping -c2 %s &>/dev/null'%ip,shell=True)
if m:
print "%s is down"%ip
else:
print "%s is up"%ip
#定义函数,允许ping任何主机,myping需要给IP作为参数
ips=['172.40.3.%s'%j for j in range(1,255)]
#生成整个网段的IP列表[172.40.3.1,172.40.3.2....]
for i in ips:
t=threading.Thread(target=myping,args=(i,))
t.start()

def ping(ip):
m=subprocess.call('ping -c2 %s'%ip,shell=True)
if m:
print "%s is down"%ip
else:
print "%s is up"%ip

ips=['192.168.4.%s'%i for i in range(1,255)]
ips=[192.168.4.1,192.168.4.2....]

for  i  in  ips:
t=treading.Tread(targe=ping,args=(i,))
t.start()

使用paramiko自动远程其他主机

#!/usr/bin/python
import paramiko
host='192.168.4.5'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username='root', password='redhat')
stdin, stdout, stderr = ssh.exec_command('ls /')
print stdout.read()
print stderr.read()

0人推荐
随时随地看视频
慕课网APP