第一天
- GBK
- UTF-8
- 格式转换
从默认的utf-8转换成gbk
s = "你好"
s_gbk = s.encode("gbk")
print(s_gbk)
print(s.encode())
gbk_to_utf8 = s_gbk.decode("gbk").encode("utf-8")
print("utf8",gbk_to_utf8)
调用sys模块,查看当前的编码,解码成gbk,再重新编码成utf-8
import sys
print(sys.getdefaultencoding())
s = u"你好"
print(s)
#s_to_unicode = s.decode("utf-8")
s_to_gbk = s.encode("gbk")
print(s_to_gbk)
#print(s_to_unicode)
gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8")
print(gbk_to_utf8)
utf-8转换成gb2312不能直接转,需要通过gbk中转
s = "你哈"
print(s.encode("gbk"))
print(s.encode("utf-8"))
print(s.encode("utf-8").decode("utf-8").encode("gb2312").decode("gb2312"))
小结:编码转换的关键在于,utf-8和gb2312不能直接转换,需要通过中间编码(gbk)进行中转
第二天
- 文件的读写
- 循环输出文件
- 找到文件的具体位置
- 刷新
- with语句
seek():移动文件读取指针到指定位置
tell():返回文件读取指针的位置
seek()的三种模式:
(1)f.seek(p,0) 移动当文件第p个字节处,绝对位置
(2)f.seek(p,1) 移动到相对于当前位置之后的p个字节
(3)f.seek(p,2) 移动到相对文章尾之后的p个字节
#data=open("yesterday",encoding="utf-8").read()
f = open("yesterday2",'a',encoding="utf-8")
f.write("\nwhen i was a young man i paly coumpter\n")
data=f.read()
f.close'''
'''f=open("yesterday",'r+',encoding="utf-8")
print(f.readline())
print(f.readline())
print(f.readline())
f.write("---------diao-------")
print(f.readline())'''
'''f = open("yesterday2","w+",encoding="utf-8")
f.write("---------diao-------\n")
f.write("---------diao-------\n")
f.write("---------diao-------\n")
print(f.tell())
f.seek(10)#找到第十行
print(f.tell())
print(f.readline())
f.write("print test file!")
f.close()'''
f = open("yesterday2","wb")#二进制
f.write("hello binary\n".encode())
f.close()
'''print(f.tell())
print(f.readline())
print(f.readline())
print(f.readline())
print(f.tell())
f.seek(10)#转到第十行
print(f.readline())
print(f.encoding)
print(f.fileno())
print(f.flush())#实时刷新
print(dir(f.buffer))
'''
#f.truncate(20)#截断20个,使用a追加
#for i in range(5):
# print(f.readline())
#print(f.readlines())
#high bige
'''count = 0
for line in f:
if count == 9:
print('------ 我是分割线------')
count +=1
continue
print(line)#效率最高
count+=1'''
#low loop
'''for index,line in enumerate(f.readlines()):
print(line.strip())
if index == 9:
print('-----我是分割线-----')
continue'''
利用刷新制作进度条
import sys,time
for i in range(20):
sys.stdout.write("#")
sys.stdout.flush()
time.sleep(0.1)
利用sys模块 进行替换内容
import sys
f = open("yesterday","r",encoding="utf-8")
f_new =open("yesterday.bak","w",encoding="utf-8")
find_str = sys.argv[1]
replace_str = sys.argv[2]
for line in f:
if find_str in line:
line = line.replace(find_str,repalce_str)
f_new.write(line)
f.close()
f_new.close()
同时打开两个文件
with open("yesterday","r",encoding="utf-8") as f,\
open("yesterday2","r",encoding="utf-8") as f2:
for line in f:
print(line)
第三天
- 集合的交并补
- 集合的添加
交集: list_1.intersection(list_2) 或者list_1 & list_2
并集: list_1.union(list_2) 或者 list_1 || list_2
差集: list_1.difference(list_2) 或者 list_1 - list_2
子集: list_1.issubset(list_2)
父集: list_1.issuperset(list_2)
对称差集:list_1。symmetric_difference(list_2) 或者 list_1 ^ list_2
list_1=[1,5,3,7,9,5,7]
list_1=set(list_1)
list_2=set([2,5,0,22,8,66,5,7])#无序
#print(list_1,type(list_1))
print(list_1,list_2)
#交集
print(list_1.intersection(list_2))
#并集
print(list_1.union(list_2))
#差集
print(list_1.difference(list_2))
print(list_2.difference(list_1))
#子集/父集
list_3=set([1,3,7])
print(list_1.issubset(list_2))
print(list_1.issuperset(list_2))
print(list_3.issubset(list_1))
#对称差集
print(list_1.symmetric_difference(list_2))
print("---------")
list_4=set([5,6,8])
print(list_3.isdisjoint(list_4))#把list4加到list3中
#intersection
print(list_1&list_2)
#union
print(list_1|list_2)
#difference
print(list_1-list_2)
#对称差集
print(list_1^list_2)
list_1.add(999)
list_1.update([100,111,222])
print(list_1)
print(list_1.pop())
list_1.remove("ddd")
list_1.discard()
第四天
- 函数的定义
- 实参
- 形参
- 调用赋值
最基本的函数定义和输出
#函数
def func1():
"""testing1"""
print('in the func1')
return 0
#过程
def func2():
'''testing2'''
print('in the func2')
x = func1()
y = func2()
print('from func1 return is %s'%x)
print('from func2 return is %s'%y)
使用time模块,按时间格式输出函数,用元组的方式返回多个值
import time
def logger():
time_format = '%Y-%m-%d %X'
time_current = time.strftime(time_format)
with open('a.txt','a+') as f:
f.write('%s end action\n' %time_current)
def test1():
print('in the test1')
#logger()
def test2():
print('in the test2')
#logger()
return 0
def test3():
print('in the test3')
#logger()
return 1,'hello',['a','b','c'],{'name':'Louis'}
t1=test1()
t2=test2()
t3=test3()
print(t1)
print(t2)
print(t3)
关键字调用分为
位置关键字——直接输入值
关键关键字——使用赋值语句,但是得写在位置参数后面
def test(x,y,z):
print(x)
print(y)
print(z)
#test(y=2,x=1)#关键字调用,与形参顺序无关
#test(1,2)#位置关键字
#test(x=2,3)
test(3,z=2,y=6)#关键参数不能写在位置参数前面
默认参数赋值,
def test(x,y=2):
print(x)
print(y)
test(1)
#默认参数特点:调用函数的时候,默认参数可有可无
'''用途:1.默认安装值
def test(x,sotf1=True,soft2=True):
2.数据库端口号
def conn(host,port==3306):
pass'''
小结:使用def定义函数,然后单独调用输出,返回return 0或者1,也可以返回元组。使用关键字参数赋值的时候,关键字参数得在位置关键字的后面
第五天
- args参数
- kwargs参数
- 全局变量和局部变量
1.*args的功能:------接收N个位置参数,转换成元组tuple形式
2.**kwargs的功能------接收N个关键字参数,转换成字典dict形式
3.位置参数一定要在关键字参数之前,也就是(*args,**kwargs)
def test(*args):
print(args)
test(1,2,3,4,5)
test(*[1,2,3,4,5])# args=tuple([1,2,3,4,5])
'''
def test1(x,*args):
print(x)
print(args)
test1(1,2,3,4,5,6,7)'''
def test2(**kwargs):
print(kwargs)
print(kwargs['name'])
print(kwargs['age'])
print(kwargs['sex'])
#把n个关键字转换成字典存储
test2(name='louis',age=18,sex='M')
#test2(**{'name':'louis','age':8})
def test3(name,**kwargs):
print(name)
print(kwargs)
test3('louis',age=18,sex='M')
def test4(name,age=18,*args,**kwargs):
print(name)
print(age)
print(args)
print(kwargs)
logger("TEST4")
#args:接受n个位置参数,转换成元组的形式
def logger(source):
print("from %s"% source)
test4('louis',age=34,sex='M',hobby='tesla')
全局变量的值在局部变量里能使用,局部变量的值出了局部变量就不能使用
在函数外不能修改函数内的值
school = "WuDa"
names = ["louis","jack","Tom"]
name_tuple = (1,2,3,4)
def change():
names[0]="枫叶"
name_tuple=(2,3,4,5)
print("inside func",names)
print(name_tuple)
change()
print(name_tuple)
#print(names)
# def change_name(name):
# global school
# school = "XDF"
# print("before change ",name,school)
# name = "louis"
# print("after change",name)
# name = "Louis"
# change_name(name)
# print(name)
# print("School:",school)
第六天
- 递归调用
- 高阶函数
递归调用必须得有结束的地方,要不然会变成死循环一直消耗内存
def calc(n):
print(n)
if int(n/2)>0:
return calc(int(n/2))
print("->",n)
calc(10)
绝对值相加,高阶函数
def add(a,b,f):
return f(a)+f(b)
res = add(3,-6,abs)
print(res)