python学习day10笔记
Posted 麋鹿的麋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习day10笔记相关的知识,希望对你有一定的参考价值。
今日内容
1.控制文件指针移动
\'\'\'
f.seek移动的全都是字节个数
f.seek(字节个数, 0)
0代表开头,在t,b下使用
f.seek(字节个数, 1)
1代表当前位置,在b模式下使用
f.seek(字节个数, 2)
2代表末尾,在b模式下使用
快速移动到末尾 f.seek(0, 2)
\'\'\'
f.tell() # 告诉你文件指针位置距离开头多少个字节
# 如何读取中间到末尾的字节
f.seek(x, 0)
f.read()
tail -f 文件路径 # 观察文件新的内容进来
import time
time.strftime("%Y-%m-%d %H:%M:%S") # 显示当前时间 %年%月%日 %时:%分:%秒
# 记录日志
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"))
# 实时记录
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 = \'\')
2.文件修改的两种方式
\'\'\'
文件修改共同原理
把硬盘数据读入内存,在内存修改完毕后,在覆盖回硬盘
具体分两种方案
\'\'\'
# 方案一,将文件内egon改成大写EGON
# 缺点:源文件过大不适合用,对内存有要求,同时费内存
# 优点:对硬盘没有要求
# 文件全部读到内存,修改完了覆盖回文件
with open(\'test.txt\',mode=\'rt\',encoding=\'utf-8\') as f:
date = f.read() # 将数据存到内存,变量date中
with open(\'test.txt\',mode=\'wt\',encoding=\'utf-8\') as f:
f.write(date.replace(\'egon\',\'EGON\'))
# 方案二,将文件内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\')
3.函数
\'\'\'
1.什么是函数
函数就是盛放功能(一系列代码)的容器
定义函数就是造出了一个工具
实现准备工具的过程->函数的定义
遇到应用场景拿来就用->函数的调用
2.为何要用函数
不用函数写出的代码问题是:
1.程序的组织结构不清晰,可读性差,可维护性差
2.程序的可扩展性差
3.如何用函数
原则:
先定义
后调用
\'\'\'
# 定义函数
定义函数的语法:
def 函数名(参数1,参数2,参数3,...): # 函数名 = 函数的内存地址
# 写文档注释信息
代码1
代码2
代码3
最后可以加 return 返回值
# 函数名通常是动词,命名规则与变量名一样
# 就是把写好的代码,上面加上def,然后代码整体缩进tab
\'\'\'
函数定义阶段发生的事:
申请内存空间,把函数体代码放进去,然后把内存地址绑定给函数名。
函数定义阶段只检测语法不执行代码,只有在调用函数时才会执行函数体代码
\'\'\'
# 调用函数
调用函数语法:
函数名(值1,值2,值3)
\'\'\'
函数调用阶段发生的事:
执行函数体代码
\'\'\'
# 函数的参数:形参与实参
s1 = \'hello world\'
调用函数时传递的这个“hello world”被称为实际参数
因为这个是实际的要交给函数的内容,简称实参
定义函数时的s1,只是一个变量的名字,被称为形式参数
因为在定义函数的时候它只是一个形式,表示这里有一个参数,简称形参
# 函数的返回值
def max2(sal1,sal2):
if sal1>sal2:
return sal1 # 返回sal1值到max2
else:
return sal2 # 返回sal2值到max2
res = max2(1000,2000) # res等于max2(值,值)的返回值
\'\'\'
函数内可以有多个返回值return
但只要执行一次,整个函数就立即结束
并且将return后的值当作本次调用的产品返回
具体来说函数的返回值有三种形式
1.return 值:返回的就是改值本身
2.return 值1,值2,值3:返回的是小元组
3.没有return\\return后无值\\return None:默认返回None
\'\'\'
4.模块
\'\'\'
1.什么是模块
模块是一系列功能的集合体
模块分为四种通用的类别
1.使用python编写的.py文件 # 只需要了解这个
2.已被编译为共享库或DLL的C或C++扩展
3.把一系列模块组织到一起的文件夹(注:文件夹下有一个_init_.py,该文件夹称之为包)
4.使用C编写并链接到python解释器的内置模块
模块有三种来源:
1.python自带的模块/库
内置模块
标准库
2.第三方的库
开源
3.自定义库
自己写
2.为何要用模块
拿来主义,提升开发效率
减少代码冗余
3.如何用模块
import
from...import...
\'\'\'
1.import
import 文件名 # 导入文件模块
文件名.需要用的代码
2.from...import...
from 文件名 import 需要的代码
5.常用模块
1.time模块
import time
# 时间戳
print(time.time()) # 距离1970年1月1日有多少秒
# 格式化的字符
print(time.strftime(\'%Y-%m-%d %H:%M:%S\'))
年-月-日 时:分:秒
# 结构化的时间
time.localtime()
a = time.localtime()
print(a.tm_year) # 输出年
time.gmtime() # utc时间
2.random模块
import random
random.random() # 随机取0-1之间的小数 float
random.randint(1, 3) # 随机取[0]-[1]之间的数 int
random.randrange(1, 3) # 随机取[0]-[1]之间的数,顾头不顾尾
random.choice([11,\'aa\',333]) # 随机列表内取一个值
random.sample([11,\'aa\',333],2), # 随机列表内取[1]个值
random.uniform(1, 3) # 随机取[0]-[1]之间的小数
item=[1, 3, 5, 7, 9]
random.shuffle(item) # 打乱item顺序
# 储备知识
chr(65) # 得到对应字符编码表中65位的A
chr(90) # 得到对应字符编码表中90位的Z
ord(\'A\')
ord(\'Z\') # 与上相反
以上是关于python学习day10笔记的主要内容,如果未能解决你的问题,请参考以下文章