https://www.cnblogs.com/alex3714/articles/5717620.html
1.集合操作
2.文件操作
文件操作补充:
#文件读取
连续两次读取文件:data1 = f.read() #读出文件所有内容
data2 = f.read() #什么都读不出
因为文件第一次读取从开头,光标在0位置,第一次读取后光标移到文件末尾,再次读取时读不到数据的。
移回光标操作:f.seek(0) #代表光标回到位置0
所以对于Python3学习笔记作业1中的hw2可以改为如下代码:
1 # Author:Tang Ziyue 2 3 #打开存储用户名密码文件和存储被锁定用户名的文件 4 f = open('E:/usr.txt','r') 5 f2 = open('E:/lock_usr.txt','a+') 6 7 dict = {} 8 list = [] 9 10 #将文件中的数据转为字典 11 for line in f.readlines(): 12 line = line.strip() #删除空白符 13 if not len(line): 14 continue 15 dict[line.split(':')[0]] = line.split(':')[1] 16 f.close() 17 18 f2.seek(0) #光标移到文件开头 19 for line2 in f2.readlines(): 20 line2 = line2.strip() 21 if not len(line2): 22 continue 23 list.append(line2) 24 25 print(dict) 26 print(list) 27 28 count = 0 29 username = input("用户名:") 30 if username in list: 31 print("此用户已被锁定!") 32 exit(0) 33 if username in dict: 34 while count<3: 35 password = input("密码:") 36 if password == dict.get(username): 37 print("欢迎",username) 38 break 39 else: 40 print("密码错误,请再次输入!") 41 count += 1 42 if count == 3: 43 print("密码尝试多次,已锁定!") 44 f2.write(username) 45 else: 46 print("此用户名不存在!") 47 f2.close()
#读行
f.readline() #读一行
f.readlines() #读所有的行,形成一个列表,每行为列表中的一个元素
但是对于超大文件来说,一次性全部读到内存中是放不下的,需要读一行且只保存一行
for line in f:
print(f) #效率最高,以后所有的for line in f.readlines():都被这个替换
#强制刷数据到硬盘
写数据时时先写到缓存上,默认等缓存慢了就刷到硬盘上
f.flush()强制将数据刷到硬盘上
例如打印进度条:
1 # Author:Tang Ziyue 2 3 import sys,time 4 5 for i in range(10): 6 sys.stdout.write('.') #标准输出,不换行,print会自动换行 7 sys.stdout.flush() #强制刷数据到硬盘输出到屏幕,输出到屏幕相当于往硬盘里写数据, 8 # 不用flush的话会一次性显示出来,因为会等缓存写满 9 time.sleep(0.1) #每0.1s打印一个
3.文件修改
不修改原文件
1 # Author:Tang Ziyue 2 3 import sys,time 4 5 f = open("yesterday",'r',encoding='utf-8') 6 f_new = open("yesterday",'w',encoding='utf-8') 7 8 for line in f: 9 if "原字符串" in line: 10 line.replace("原字符串","新字符串") 11 f_new.write(line) 12 f.close() 13 f_new.close()
4.函数
#函数 #过程,是无返回值的函数
def func1(): def func2():
print("...") print("...")
return 0
总结:返回值数=0:返回None
返回值数=1:返回Object
返回值数>1:返回tuple
#有参函数
def func(x,y):
print(x)
print(y)
调用:1位置参数调用,与形参一一对应 func(1,2)
2)关键字调用,与形参顺序无关 func(y=1,x=2)
注:关键参数不能在顺序参数前面:func(x=2,1) X func(2,y=1) √
3)默认参数调用,默认参数非必须传递
def func(x,y=2)
print(x)
print(y)
func(1) #结果是1 2
func(1,y=3)或func(1,3) #结果是1 3
4)不固定参数 #*args把n个位置参数转为一个元组
def func(*args):
print(args)
func(1,2,3,4)或者func(*[1,2,3,4])
结果:(1,2,3,4)
# **kwargs把n个关键字参数转换成字典的方式
def func(**kwargs):
print(kwargs)
func(name = 'tzy',age = 8, sex = 'f')
func(**{'name':'tzy', 'age':8,'sex':'f'})
结果:{'name':'tzy','age':8,'sex':'f'}
5.字符编码
6.局部变量
除字符串和数字等简单数据类型之外,其他数据类型例如列表、字典等局部变量可以更改全局变量的值。
name = ["A","B"] def func(): name[0] = "C" print(name) func() print(name) #结果:['C', 'B'] ['C', 'B'] name = "A" def func(): name = "C" print(name) func() print(name) #结果:C A
7.递归
8.高阶函数
浙公网安备 33010602011771号