6_9
1.f.seek(字节数,模式)
模式:0,1,2
注:0模式较为特殊,只能在t模式下使用
例:
# f.seek(字节个数,0)
# f.seek(字节个数,1)
# f.seek(字节个数,2)
2.文件修改的2种方法
核心:字符串replace()
1.在内存中直接修改,费内存
2.建立2个文件,用文件2覆盖1,对硬盘要求较高
方案2涉及文件操作:os.remove,os.rename
例
1.
# 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'))
2.
# 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.函数的定义:
def 函数名(参数1,参数2,参数3,...):
代码1
代码2
······
return 值
3.函数的调用:
函数名()
4.函数的返回值:
函数内可以有多个return,但只要执行一次,整个函数就立即结束。根据这个特性,可以用return来结束函数。
返回值的3中形式:
return 值
return 值1,值2,值3:返回的是小元组
return None:没有return或return无值,返回的都是None
4.模块
1.模块的分类:(根据来源)
1.1 python自带的模块/库
内置模块
标准库
1.2 第三方的库
1.3 自定义
2.模块的调用:
import 模块名 #相当于调用模块
from 模块名 import f1,f2 #相当于调用模块内部函数
5.常用模块
1.1时间戳
# print(time.time()) #当前时间到计算机元年的秒数,用于以时间差计时
1.2格式化的字符
# print(time.strftime('%Y-%m-%d %H:%M:%S'))
1.3结构化的时间
# obj = time.localtime()
# obj2 = time.gmtime() # 标准国际时间
# print(obj.tm_year)
# print(obj.tm_yday)
# print(obj)
2.random模块 #用于产生随机数
# print(random.random()) #随机小数
# print(random.randint(1,3)) #随机整数,顾头顾尾
# print(random.randrange(1,3))#随机整数,顾头不顾尾
# print(random.choice([11,"aaa",333]))#随机选择
# print(random.choices([11,"aaa",333],[1,2,1],k=2))#第一个列表表示随机选择的对象,第2个列表是对对象加上权重,k=2表示选择的次数,2次可以选择同一对象
# print(random.sample([11,"aaa",333,444],2))#随机选择2个,选择之后还是列表,2表示一次性选出2个,不能是同一对象
可以用来产生随机验证🐎
不能这么写,为什么?
import random
res = random.choices([chr(random.randint(48, 57)), chr(random.randint(97, 122)), chr(random.randint(65, 90))], [4, 2, 2], k =4)
print("".join(res))
程序会先执行并固定列表中的内容,导致输出相当于实在3个字符里选4次,必有一个相同
正确写法:
import random
num = ""
for i in range(4):
res = random.choices([chr(random.randint(48, 57)), chr(random.randint(97, 122)),chr(random.randint(65, 90))], [1, 1, 1], k =1)
num += "".join(res)
print(num)
1.ord("A")用于看ASCLL码
2.
import string
s = string.ascii_letters
print(s)
#结果abcdefghijklmnopqrstuvwxyzA BCDEFGHIJKLMNOPQRSTUVWXYZ
3.(*****)
列表和字典的复制和变量不同
直接相等= #变量可以,列表则只是复制地址,指向同一片内存空间,修改一个,另一个也会变
copy.copy() #列表的复制,列表的值是独立的,但如果是2级列表,一级列表的值指向的地址(二级列表的值的地址)仍然是相同的
copy.deepcopy() #彻底复制,完全不相干