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笔记的主要内容,如果未能解决你的问题,请参考以下文章

python学习day10笔记

python学习笔记-day1

Python学习笔记day6

Python学习笔记-基础Day01

python学习笔记Day2

Python100天学习笔记Day10 图形用户界面和游戏开发