open内建函数
• 作为打开文件之门的“钥匙”,内建函数open() 提供了初始化输入/输出(I/O)操作的通用接口
• 成功打开文件后时候会返回一个文件对象,否则引发一个错误
• 基本语法:
file_object =open(file_name, access_mode=‘r’, buffering=-1)
r 以读方式打开(文件不存在则报错)
w 以写方式打开(文件存在则清空,不存在则创建)
a 以追加模式打开(必要时创建新文件)
r+ 以读写模式打开(参见r)
w+ 以读写模式打开(参见w)
a+ 以读写模式打开(参见a)
b 以二进制模式打开
read内建函数
• read()方法用来直接读取字节到字符串中,最多读取给定数目个字节
• 如果没有给定size参数(默认值为-1)或者size值为负,文件将被读取直至末尾
readline内建函数
• 读取打开文件的一行(读取下个行结束符之前的所有字节)
• 然后整行,包括行结束符,作为字符串返回
• 它也有一个可选的size参数,默认为-1,代表读至行结束符
• 如果提供了该参数,那么在超过size个字节后会返回不完整的行
• readlines()方法读取所有(剩余的)行然后把它们作为一个字符串列表返回
>>> data = fobj.read()
>>> print(data)
>>> data = fobj.readline()
>>> print(data)
>>> data = fobj.readlines()
>>> print(data)
write方法
• write()内建方法功能与read()和readline()相反。它
把含有文本数据或二进制数据块的字符串写入到文件中去
• 写入文件时,不会自动添加行结束标志,需要程序员手工输入
>>> fobj.write('Hello World!\n')
13
函数基本概念
• 函数是对程序逻辑进行结构化或过程化的一种编程方法
• 将整块代码巧妙地隔离成易于管理的小块
• 把重复代码放到函数中而不是进行大量的拷贝,这样既能节省空间,也有助于保持一致性
• 通常函数都是用于实现某一种功能
创建函数
• 函数是用def语句来创建的,语法如下:
def function_name(arguments):
"function_documentation_string"
function_body_suite
• 标题行由def关键字,函数的名字,以及参数的集合
(如果有的话)组成
• def子句的剩余部分包括了一个虽然可选但是强烈推荐的文档字串,和必需的函数体
定义函数时,使用return返回结果
>>> def func(i):
... x = i**2
... return x //调用函数需要使用return返回结果
...
>>> func(4)
16
>>> func(15)
225
>>> x = func(15)
>>> x
225
>>> def test(i):
... if i%2 == 0:
... return True //返回真
... else:
... return False //返回假
>>> if test(10):
... print('ok')
...
ok
>>> if test(13):
... print('ok')
... else:
... print('no')
...
no
位置参数
• 与shell脚本类似,程序名以及参数都以位置参数的方式传递给python程序
• 使用sys模块的argv列表接收(sys.argv[0]为程序名本身,sys.argv[n]为第n个位置参数)
[root@zzghost1 day02]# vim args.py
#!/usr/bin/env python3
import sys
print sys.argv
[root@zzghost1 day02]# ./args.py hello world
['./args.py', 'hello', 'world']
练习01:复制文件程序
#!/usr/local/bin/python3
#复制文件程序
import sys
def copy(src_file,dest_file): #定义复制函数
src_fb = open(src_file, 'rb') #以只读二进制方式打开源文件
dest_fb = open(dest_file, 'wb') #以写入二进制方式打开目标文件
while True:
data = src_fb.read(1048576) #读取源文件内容
if data: #判断文件是否为空
dest_fb.write(data) #不为空则写入读取的数据到目标文件
else:
break #为空则退出while循环
src_fb.close() #关闭打开的源文件
dest_fb.close() #关闭打开的目标文件
#main
copy(sys.argv[1],sys.argv[2]) #调用函数,传递参数
[root@room9pc01 exercise]# ./copy_sys.py /root/ls /opt/ls //执行程序
[root@room9pc01 exercise]# md5sum /root/ls /opt/ls //校验源文件与目标文件一致性
918cb545b3458e1bf18b712b36af304f /root/ls
918cb545b3458e1bf18b712b36af304f /opt/ls
练习02:打印九九乘法表
#!/usr/local/bin/python3
#打印九九乘法表
def mtable(n):
for i in range(1, n+1):
print('%dx%d=%d' % (i,n,i*n), end='\t')
for x in range(1, 10):
mtable(x)
print('')
[root@room9pc01 exercise]# ./9x9_sys.py
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
练习03:用户登录程序
#!/usr/local/bin/python3
#用户登录程序
def login_check(username,password): #定义检查登录函数
default_username= 'root'
default_password= '123456'
if username == default_username and password == default_password:
return True #用户名和密码正确则返回为真
while True:
username=input('localhost login:') #输入用户名
password=input('password:') #输入密码
if login_check(username,password): #调用检查登录函数
print('welcome', username, '!') #函数返回值为真则打印欢迎
break #结束循环
else:
print('输入错误!') #否则提示输出错误,进入下一次输入
模块基本概念
• 模块是从逻辑上组织python代码的形式
• 当代码量变得相当大的时候,最好把代码分成一些有组织的代码段,前提是保证它们的彼此交互
• 这些代码片段相互间有一定的联系,可能是一个包含数据成员和方法的类,也可能是一组相关但彼此独立的操作函数
创建模块
• 模块物理层面上组织模块的方法是文件,每一个以.py作为结尾的python文件都是一个模块
• 模块名称切记不要与系统中已存在的模块重名
• 模块文件名字去掉后面的扩展名(.py)即为模块名
导入模块(import)
• 使用import导入模块
• 模块属性通过“模块名.属性”的方法调用
• 如果仅需要模块中的某些属性,也可以单独导入
>>> import sys
>>> import os, string
>>> string.digits
'0123456789'
>>> from random import randint
>>> randint(1, 10)
3
练习04:导入自定义模块
[root@room9pc01 exercise]# vim cat_sys.py //定义模块
#!/usr/local/bin/python3
#查看文件程序
#import sys
def cat(file):
f1 = open(file,'r')
for eachLine in f1:
print(eachLine,end='')
#main
#cat(sys.argv[1])
>>> import cat_sys //导入模块
>>> cat_sys.cat('login_def.py') //引用模块内属性
#!/usr/local/bin/python3
#用户登录程序
def login_check(username,password): #定义检查登录函数
default_username= 'root'
default_password= '123456'
if username == default_username and password == default_password:
return True #用户名和密码正确则返回为真
while True:
username=input('localhost login:') #输入用户名
password=input('password:') #输入密码
if login_check(username,password): #调用检查登录函数
print('welcome', username, '!') #函数返回值为真则打印欢迎
break #结束循环
else:
print('输入错误!') #否则提示输出错误,进入下一次输入
-------------------------------------------------------------------------------------------
>>> from cat_sys import cat //单独导入模块内属性
>>> cat('login_def.py') //直接调用模块内属性
#!/usr/local/bin/python3
#用户登录程序
def login_check(username,password): #定义检查登录函数
default_username= 'root'
default_password= '123456'
if username == default_username and password == default_password:
return True #用户名和密码正确则返回为真
while True:
username=input('localhost login:') #输入用户名
password=input('password:') #输入密码
if login_check(username,password): #调用检查登录函数
print('welcome', username, '!') #函数返回值为真则打印欢迎
break #结束循环
else:
print('输入错误!') #否则提示输出错误,进入下一次输入
默认参数
>>> def moren(num=30):
... print('8'*num)
...
>>> moren()
888888888888888888888888888888
>>> moren(60)
888888888888888888888888888888888888888888888888888888888888
文件迭代
• 如果需要逐行处理文件,可以结合for循环迭代文件
• 迭代文件的方法与处理其他序列类型的数据类似
>>> fobj = open('star.py')
>>> for eachLine in fobj:
... print(eachLine, end= '')
示例:
>> f1= open('login_def.py', 'r')
>>> for eachLine in f1:
... print(eachLine, end='')
...
#!/usr/local/bin/python3
#用户登录程序
def login_check(username,password): #定义检查登录函数
default_username= 'root'
default_password= '123456'
if username == default_username and password == default_password:
return True #用户名和密码正确则返回为真
while True:
username=input('localhost login:') #输入用户名
password=input('password:') #输入密码
if login_check(username,password): #调用检查登录函数
print('welcome', username, '!') #函数返回值为真则打印欢迎
break #结束循环
else:
print('输入错误!') #否则提示输出错误,进入下一次输入
变量替换
>>> for i in range(1, 20):
... print('%2d' %i)
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> for i in range(1, 20):
... print('%2d' %i)
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> for i in range(1, 20):
... print('%02d' %i)
...
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
>>> for i in range(1, 20):
... print('%03d' %i)
...
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019