今日内容
控制文件指针移动
# f.seek移动的全都是字节个数
# f.seek(字节个数,0)
# f.seek(字节个数,1)
# f.seek(字节个数,2)
# ps:只有0模式可以t下使用,其中1和2模式只能在b模式下使用,但是无论在t模式还是b模式下,移动的都是字节个数
# with open('a.txt',mode='rt',encoding='utf-8') as f:
# print(f.tell())
# # f.seek(9,0)
# # f.seek(3,0)
#
# print(f.tell())
# with open('a.txt',mode='rb') as f:
# print(f.tell())
# f.seek(9,1)
# f.seek(3,1)
#
# print(f.tell())
# with open('a.txt',mode='rb') as f:
# print(f.tell())
# f.seek(0,2)
#
# print(f.tell())
# with open('a.txt',mode='ab') as f:
# print(f.tell())
tail程序实现
with open('access.log', mode='rb') as f:
f.seek(0, 2)
while True:
line = f.readline()
if len(line) == 0:
continue
else:
print(line.decode('utf-8'),end='')
修改文件的两种方式
# with open('test.txt', mode='r+t', encoding='utf-8') as f:
# f.seek(9,0)
# f.write("hello")
# 文件修改的原理:
# 把硬盘数据读入内存,在内存修改完毕后,再覆盖回硬盘
# 具体来说又分为两种方案
# 方案一:
# with open('test.txt',mode='rt',encoding='utf-8') as f:
# data = f.read()
#
# with open('test.txt',mode='wt',encoding='utf-8') as f:
# f.write(data.replace('egon','EGON'))
# 方案二:
import os
with open('test.txt',mode='rt',encoding='utf-8') as f1,\
open('.test.txt.swp',mode='wt',encoding='utf-8') as f2:
for line in f1:
f2.write(line.replace('EGON',"egon"))
os.remove('test.txt')
os.rename('.test.txt.swp','test.txt')
定义与调用函数
一、函数是什么
函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段。
要想用函数,需要先定义,再使用
一、 为何要用函数之不用函数的问题
1、代码的组织结构不清晰,可读性差
2、遇到重复的功能只能重复编写实现代码,代码冗余
3、功能需要扩展时,需要找出所有实现该功能的地方修改之,无法统一管理且维护难度极大
三、如何定义函数
def 函数名(参数1,参数2,参数3,...):
'''注释'''
函数体
return 返回的值
四、 函数使用的原则:先定义,再调用
1.函数即“变量”,“变量”必须先定义后引用。未定义而直接引用函数,就相当于在引用一个不存在的变量名
#测试一
def foo():
print('from foo')
bar()
foo() #报错
#测试二
def bar():
print('from bar')
def foo():
print('from foo')
bar()
foo() #正常
#测试三
def foo():
print('from foo')
bar()
def bar():
print('from bar')
foo() #会报错吗?
#结论:函数的使用,必须遵循原则:先定义,后调用
#我们在使用函数时,一定要明确地区分定义阶段和调用阶段
#定义阶段
def foo():
print('from foo')
bar()
def bar():
print('from bar')
#调用阶段
foo()
2.函数的定义阶段
#只检测语法,不执行代码
也就说,语法错误在函数定义阶段就会检测出来,而代码的逻辑错误只有在执行时才会知道
五、函数的调用
1 语句形式:foo()
2 表达式形式:3*len('hello')
3 当中另外一个函数的参数:range(len('hello'))
函数的参数
# 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)
函数的返回值
无return->None
return 1个值->返回1个值
return 逗号分隔多个值->元组
什么时候该有返回值?
调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值
通常有参函数需要有返回值,输入参数,经过计算,得到一个最终的结果
什么时候不需要有返回值?
调用函数,仅仅只是执行一系列的操作,最后不需要得到什么结果,则无需有返回值
通常无参函数不需要有返回值
模块的使用
"""
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))