day10 文件修改 函数基础 模块
今日内容
文件修改的两种方式
函数的参数
模块
自定义函数
tail程序
import time
with open('access.log',mode='at',encoding='utf-8') as f:
f.write('%s 张三 200.103.110.22 ok\n'% time.strftime('%Y-%m-%d %H:%M:%S'))
文件修改的两种方式
# import time
# with open('a.txt',mode='at',encoding='utf-8') as f:
# f.write('%s 张三 200.103.110.22 ok\n'% time.strftime('%Y-%m-%d %H:%M:%S'))
#方案一:
# with open('b.txt',mode='rt',encoding='utf-8') as f:
# data = f.read()
# with open('b.txt',mode='wt',encoding='utf-8') as f:
# f.write(data.replace('TXT','TXT.'))
#方案2
# import os
# with open('b.txt',mode='rt',encoding='utf-8') as f1,\
# open('.b.txt.swp',mode='wt',encoding='utf-8') as f2:
# for line in f1:
# f2.write(line.replace('TXT','TXT.'))
#
# os.remove('b.txt')
# os.rename('.b.txt.swp','b.txt')
函数
1 什么是函数
函数就是盛放功能(一系列代码)的容器
定义函数就是造出了一个工具
事先准备工具的过程->函数的定义
遇到应用场景拿来就用->函数的调用
2 为何要用函数
不用函数写出的代码问题是:
1 程序的组织结构不清晰,可读性差,可维护性差
2 可扩展性差
3 如何用函数
原则:
先定义
后调用
定义函数的语法:
def 函数名(参数1,参数2,参数3,...):
代码1
代码2
代码3
return 值
调用函数语法:
res = 函数名(值1,值2,值3)
函数的参数
def add(x,y):
res = x + y
print(res)
add(1,2)
def func(x, y):
if x > y:
print(x)
else:
print(y)
func(11231231231, 22123123123213)
def login(inp_user,inp_pwd):
if inp_user == 'egon' and inp_pwd == "123":
print('ok')
else:
print('error')
login('egon',"123")
l = [111, 222, 333, 444, 555]
size = len(l)
if size > 3:
print('ok')
else:
print('no')
def max2(sal1, sal2):
if sal1 > sal2:
return sal1
else:
return sal2
res = max2(1000,2000)
print(res * 12)
l = [111, 22, 333]
res = l.append(4444)
res = l.pop()
print(res)
return返回值的语法:
函数内可以有多个return,但只要执行一次,整个函数就立即结束,并且将return后的值当作本次调用的产品返回
def func():
print('aaaa')
return 11111111111111
print('bbbb')
return 2222222222
print('cccc')
return 333333333
res = func()
print(res)
具体来说函数的返回值有三种形式
1 return 值: 返回的就是改值本身/-
2 return 值1,值2,值3:返回的是小元组
def func():
return 1111,"aaa",[11,222]
x,y,z = func()
print(x,y,z)
# 3 没有return或者return无值或者return None:返回的都是None
def func():
res = 1 + 2
return
res = func()
print(res)
模块
1 什么是模块
模块一系列功能的集合体
模块分为四种通用的类别
1 使用python编写的.py文件
2 已被编译为共享库或DLL的C或C++扩展
3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
4 使用C编写并链接到python解释器的内置模块
模块有三种来源:
1 python自带的模块/库
内置模块
标准库
2 第三方的库
3 自定义库
2 为何要用模块
1 拿来主义,提升开发效率
2 减少代码冗余
3 如何用模块
import
from ... import
"""
# import spam
# print(spam.x)
# print(spam.f1)
# print(spam.f2)
# def f1():
# print('xxxxxxxx')
# spam.f1()
# spam.f2()
# from spam import x,f1,f2
# def f1():
# print('xxxxx')
# f1()
常用模块
# 一 time模块
import time
# 时间戳
# print(time.time())
# 格式化的字符
# print(time.strftime('%Y-%m-%d %H:%M:%S'))
# 结构化的时间
# obj = time.localtime()
# print(obj.tm_year)
# print(obj.tm_yday)
# print(obj)
# obj2 = time.gmtime() # utc
# print(obj2)
# 二 random模块
import random
# print(random.random())
# print(random.randint(1,3))
# print(random.randrange(1,3))
# print(random.choice([11,"aaa",333]))
# print(random.sample([11,"aaa",333,444],2))
# print(random.uniform(1, 3))
# item=[1,3,5,7,9]
# random.shuffle(item)
# print(item)
# 储备知识
# print(chr(65))
# print(chr(90))
#
# print(ord('A'))
# print(ord('Z'))
import random
def make_code(size):
res = ''
for i in range(size):
num = str(random.randint(0,9))
s = chr(random.randint(65,90))
res += random.choice([num,s])
return res
print(make_code(6))
# 三 os模块
print(os.cwd)
os.environ 环境变量 整个系统中都可以用
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: ('.')
os.pardir 获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.rename("oldname","newname") 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command") 运行shell命令,直接显示
os.environ 获取系统环境变量
os.path.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小2
# 四 subprocess
#tasklist | findstr python.exe
#taskkill /F /PID 30060-------------------杀程序
#os.system('tasklist | findstr chorome')
#res = os.system('tasklist')
#print('='*58)
#print(res)
import subprocess
subprocess.Popen('tasklist',shell=True)
自定义函数
1.必须 先定义 后调用
2.func 指向函数的内存地址
形式一:
def func();
print('hhh')
func()
#定义函数发生的事情 # def func()
#1.申请内存空间保存函数体代码
#2.将上述内存地址绑定函数名
#3.定义函数不会执行函数体代码,但是会检测函数体语法
#调用函数发生的事情 func()
#1.通过函数名找到函数的内存地址
#2.然后加括号就是在触发函数体代码的执行