一 文件管理
1.1 文件:一首歌 一部电影 一篇文章 写过的python脚本
1.2 文件的操作流程
1. 打开文件 open(“文件名”,“打开方式”)
r 以读方式打开(文件不存在则报错)
w 以写方式打开(文件存在则清空,不存在则创建)
a 以追加模式打开(必要时创建新文件)
r+ 以读写方式打开(文件不存在则报错)
w+ 以读写方式打开(文件不存在则报错)
a+ 以读写方式打开(文件不存在则报错)
b 以二进制模式打开
2. 读/写文件 read()/write()
3. 关闭文件 close()
● read() 函数的使用
>>> f = open("/code/a.txt",'r')
>>> data=f.read()
>>> f.read()
''
>>>f.close()
>>> type(data)
<class 'str'>
>>> print(data)
>>> f = open("/code/a.txt",'r')
>>> f.read(4)
'root'
>>> f.read() #读剩下的所有
● readline() 函数的使用
>>> f = open("/code/a.txt",'r')
>>> f.readline()
'root:x:0:0:root:/root:/bin/bash\n'
>>>
>>> f.readline()
'bin:x:1:1:bin:/bin:/sbin/nologin\n'
>>>
>>> f.readline()
'daemon:x:2:2:daemon:/sbin:/sbin/nologin\n'
>>>
>>> f.readline()
'adm:x:3:4:adm:/var/adm:/sbin/nologin\n'
>>>
>>> f.readline()
'lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\n'
>>> f.readline()
''
>>> f.close()
>>>
● readlines() #读取所有(剩余的)行
>>> f = open("/code/a.txt",'r')
>>> data = f.readlines()
>>> type(data)
<class 'list'>
>>> print(data)
['root:x:0:0:root:/root:/bin/bash\n', 'bin:x:1:1:bin:/bin:/sbin/nologin\n', 'daemon:x:2:2:daemon:/sbin:/sbin/nologin\n', 'adm:x:3:4:adm:/var/adm:/sbin/nologin\n', 'lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\n']
>>>
>>> data[0]
'root:x:0:0:root:/root:/bin/bash\n'
>>>
>>> data[1]
'bin:x:1:1:bin:/bin:/sbin/nologin\n'
>>>
>>> for x in data:
... print(x)
...
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
>>>
[root@teacher code]# cat 3_1.py
f = open("/code/a.txt",'r')
data = f.readlines()
for x in data:
print(x)
[root@teacher code]#
● write() 向文件添加内容
>>> f = open('/code/c.txt','w')
>>> f.write('ABCDE\n')
6
>>> f.write('23456\n')
6
>>> f.close()
>>>
writelines() 向文件添加内容
>>> f = open('/code/c.txt','a')
>>> f.writelines(["wo kun le \n","bix shui \n"," xue bu hui\n"])
>>> f.writelines(["wo kun le \n","bix shui \n"," xue bu hui\n"])
>>> f.close()
>>>
● 关闭文件
close() closed with
● seek(offset[, whence]):移动文件指针到不同的位置
offset是相对于某个位置的偏移量
whence的值,0表示文件开头,1表示当前位置,2表示文件的结尾
● tell():返回当前文件指针的位置
>>> f = open('/code/c.txt','r')
>>> f.tell()
0
>>> f.seek(0,2)
83
>>> f.tell()
83
>>> f.read()
''
>>> f.seek(0,0)
0
>>> f.read(10)
'dafafABCDE'
>>> f.tell()
10
>>>
● with 子句 可以把打开的文件自动关闭
>>> with open("/code/c.txt",'r') as fobj:
... data = fobj.readlines()
...
>>> fobj.closed
True
>>> print(data)
['dafafABCDE\n', '23456\n', 'wo kun le \n', 'bix shui \n', ' xue bu hui\n', 'wo kun le \n', 'bix shui \n', ' xue bu hui\n']
>>>
● 模拟cp操作
步骤一:编写脚本
[root@localhost day03]# vim cp.py
f1 = open('/bin/ls', 'rb')
f2 = open('/root/ls', 'wb')
data = f1.read()
f2.write(data)
f1.close()
f2.close()
【●】函数基础
一、函数基本操作
1.函数基本概念
●函数是对程序逻辑进行结构化或过程化的一种编程方法 ●什么是函数,是可以重复执行的语句块,可以重复调用 2.作用 ● 用于封装语句块,提高代码的重要性
3.创建函数 ● 函数使用def语句来创建的,语法格式如下:
def 脚本名字():
#定义函数say() def say(): #功能 输出6次 我爱你中国 for i in range(6): print("我爱你中国") print("_" * 50) #输出分隔线 say() #第一次调用函数 say() #第二次调用 say() #第三次调用函数
● 标题行有def关键字,函数的名字,以及参数的集合(如果有的话)组成
-
调用函数 ● 同大多数语言相同,Python用一对圆括号调用函数 ● 如果没有加圆括号,只是对函数的引用
-
函数的返回值 ● 多数情况下,函数并不直接输出数据,而是向调用者返回值 ● 函数的返回值使用 return 关键字 ● 没有 return 的话,函数默认返回 None(无)
(1)
#定义函数say()
def say():
for i in range(6): print("我爱你中国") print("_" * 50) # 输出分隔线 return "ok" x= say() print(x)
(2)
#功能计算数字10+10的和 def numsum(): s = 10 + 10 print("10 + 10 =",s) return s k= numsum() print(k)
[root@dc python]# python3 3.py 10 + 10 = 20 20
二、函数参数 1.定义函数 ●形式参数 ——函数定义时,紧跟在函数名后(圆括号内)的参数被称为形式参数,简称形参。由于他不是实际存在变量,所以又称虚拟变量
●实际参数
——在住调函数中调用一个函数时,函数名后面括弧中的参数(可以是一个表达式)成为实际参数,简称实参。
def numsum(a,b): #形参 s = a + b print(a , "+" , b , "=" , s)
numsum(20,30) #实参 numsum(50,60) numsum(40,80)
[root@dc python]# python3 3.py 20 + 30 = 50 50 + 60 = 110 40 + 80 = 120
2.传递参数 ●调用函数时,实参的个数需要与形参个数一致 ●实参将依次传递给形参
def numsum(a,b): #形参 s = a + b print(a , "+" , b , "=" , s)
numsum(20,30) #实参 numsum(50,60) numsum(40,80)
[root@dc python]# python3 3.py 20 + 30 = 50 50 + 60 = 110 40 + 80 = 120
3.位置参数 ●与shell脚本类似,程序名以及参数都以位置参数的方式传递给Python程序 ●使用sys模块的 argv 列表接收
#功能计算任意个数相加的和的脚本 可以执行脚本输入 要计算的数
import sys
x=sys.argv
y = 1
sum = 0
while y < len(x)
sum += int(x[y])
y += 1
print("相加的和:",sum)
import sys
x=sys.argv
y = 1
sum = 0
for y in range(1,len(x))
sum += int(x[y])
y += 1
print("相加的和:",sum)
[root@dc python]# python3 4.py 60 70 70 相加的和: 200
4.默认参数 ●默认参数就是声明了默认值的参数 ●因为给参数赋予了默认值,所以在函数调用时,不向该参数传入值也是允许的
#给函数的参数设置默认值,如果有多个形参默认值要在参数列表的末尾 #功能输出指定个数的一条线 def lines(y,x=20): print("形参y的值:",y) print("" * x)
lines(45) lines(50,60)
[root@dc python]# python3 5.py 形参y的值: 45
形参y的值: 50
#星号 * 变成了横线
●案例一、 编写脚本jsq.py 计算器练习题 能够对任意个数 单元 + — * / jslx = input("请选择你要做什么运算: + - * / ")
L = [] while True: x = input("请输入要计算的数字,敲回车结束输入") if x == "": break L.append(x) def he(): x = 0 #累加的和 y = 0 #定义循环结构的初值 while y < len(L): x += int(L[y]) y += 1 print("相加的和 = ", x)
def cha(): x = int(L[0]) #做减法计算的初值 for y in range(1,len(L)): x -= int(L[y]) print("相减的差 = ",x)
def ji(): x = int(L[0]) #做乘法计算的初值 for y in range(1,len(L)): x *= int(L[y]) print("相乘的积 = ",x)
def shang(): x = int(L[0]) #做除法计算的初值 for y in range(1,len(L)): x //= int(L[y]) print("相除的商 = ",x)
if jslx == "+": he() elif jslx == "-": cha() elif jslx == "*": ji() elif jslx == "/": shang()
【●】模块基础
一、定义模块 1.模块基本概念 ●模板是从逻辑上组织Python代码的形式。 ●当代码量变得相当大的时候,最好把代码分成一些有组织的代码段,前提是保证它们的彼此交互。 ●这些代码段相互间有一定的联系,可能是一个包含数据成员和方法的类,也可能是一组相关但彼此独立的操作函数。
2.创建模块 ●模板物理层面上组织模块的方法是文件,每一个以.py作为结尾的Python文件都是一个模块 ●模块名称切记不要与系统中已存在的模块重名 ●模块文件名字去掉后面的扩展名(.py)即为模块名 3.作用 把相关功能的函数等放在一起有利于管理,有利于多人合作开发 4.模块分类 ● ● ● ●
二、使用模块 1.导入模块 ●使用 import 导入模块 import + 模块名称(里面所有内容)
●模块属性通过“模块名.属性”的方法调用 import + 某个工具名称(如 os,string)
●如果仅需要模块中某些属性,也可以单独导入 from random import randint
[root@dc python]# python3
import sys #模块名称 import os,string string.digits '0123456789' from random import randint randint(1,10) 7
2.模块加载(load) ●一个模块只被加载一次,无论它被导入多少次 ●只加载一次可以阻止多重导入时代码被多次执行 ●如果两个文件相互导入,防止了无限的相互加载 ●模块加载时,顶层代码会自动执行,所以只会将函数放入模块的顶层是良好的编程习惯
3.模块导入的特性 ●模块具有一个 __ name __ 特殊属性 ●当模块文件直接执行时,__ name __ (两个下划线)的值为' __ main __ ' ●当模块被另一个文件导入时,__ name __ 的值就是该模块的名字