一、csv文件读写
csv:Comma Separated Values ,逗号分隔值
.csv是一种文件格式,其实是一种特殊的文本文件格式
特点;字符之间使用英文逗号或者tab键分隔,主要用来不同程序之间进行数据的交互
注意:在Windows下可以通过excel,文本文档,notepad++,Editplus等
1.读取csv文件
代码演示:
#第一步:导入模块 import csv #第二步:经典的三部曲 def readCsv1(path): #1.打开文件 csvFile = open(path,"r") #2.将文件对象转换为可迭代对象【读取内容】 csvReader = csv.reader(csvFile) #result = f.read(),result本身就是文件中的内容 #print(type(csvReader)) #3.获取内容 infoList = [] for item in csvReader: print(item) infoList.append(item) #print(infoList) #4.关闭文件 csvFile.close() return infoList #第三步:简写方式 def readCsv2(path): infoList = [] with open(path,"r") as csvFile: csvReader = csv.reader(csvFile) for item in csvReader: infoList.append(item) return infoList #第四步:采用普通的方式读取csv文件:可以读取,但是,最终将其中的内容只是当做普通的文本读取出来 #注意:但凡涉及到csv文件的读取,尽量采用特有的方式 def readCsv3(path): csvFile = open(path,"r") result = csvFile.read() print(result) csvFile.close() path = r"csvFile.csv" readCsv3(path)
2.写入csv文件
代码演示:
import csv #一.从列表写入csv文件 def writeCsv1(path): #1.定义一个列表 list1 = [['username', 'password', 'age', 'address'], ['zhangsan', 'abc123', '534', 'china'], ['lisi', 'fhhf', '56', 'beijing']] #2.打开文件 #注意:默认每写入一行,会出现一个空行,newline消除空行 csvFile1 = open(path,"w",newline="") #3.将文件对象转换为可迭代对象 csvWriter = csv.writer(csvFile1) #4.写入内容 for i in range(len(list1)): csvWriter.writerow(list1[i]) #5.关闭文件 csvFile1.close() #二、从字典写入csv文件 def writeCsv2(path): dict1 = {"张三":10,"李四":36,"jack":6} csvFile2 = open(path,"w",newline="") csvWriter2 = csv.writer(csvFile2) for key in dict1: csvWriter2.writerow([key,dict1[key]]) csvFile2.close() #三、简写形式 def writeCsv3(path): list1 = [['username', 'password', 'age', 'address'], ['zhangsan', 'abc123', '534', 'china'], ['lisi', 'fhhf', '56', 'beijing']] with open(path,"w") as csvFile3: csvWriter3 = csv.writer(csvFile3) for i in range(len(list1)): csvWriter3.writerow(list1[i]) path = r"file2.csv" writeCsv2(path)
二、高阶函数
概念:如果一个函数以另外一个函数作为参数,该函数运算完成之后返回一个结果,那么 该函数被称为高阶函数
1.map()
代码演示:
#一、map() """ 原型:map(func,lsd) func:函数 lsd;序列【列表,元组。。。】 作用:将func作用于lsd的每一个元素,返回一个新的可迭代对象 """ #1.需求:生成一个新的列表,列表中的额素是原列表中元素的平方 def square(x): return x ** 2 #注意:函数作为参数使用,只需要给形参赋值,赋函数名 r0 = map(square,[1,2,3,4,5,6]) print(r0) print(type(r0)) print(list(r0)) #[1, 4, 9, 16, 25, 36] #工作原理 """ newList1 = [] for num in [1,2,3,4,5,6]: newList1.append(num ** 2) """ #使用匿名函数实现 r1 = map(lambda x : x ** 2,[1,2,3,4,5,6]) print(list(r1)) #使用列表生成式实现 r2 = [x ** 2 for x in [1,2,3,4,5,6]] #2.需求;将整数元素的列表,转化为字符串列表 #[1,2,3,4]------>["1","2","3","4"] list1 = [1,2,3,4] newList2 = [] for num in list1: newList2.append(str(num)) print(newList2) r3 = map(str,list1) print(list(r3)) #3.需求:map中可以提供多个列表,对相同位置上的元素做指定的操作 list1 = [1,2,3,4,5] list2 = [6,7,8,9,10] newList3 = [] for i in range(len(list1)): newList3.append(list1[i] + list2[i]) print(newList3) def add(x,y): return x + y r4 = map(add,list1,list2) print(list(r4)) r5 = map(lambda x,y:x + y,list1,list2) print(list(r5)) #总结:会将序列中的每一个元素通过给定的函数进行运算,操作几个列表,最好在函数部分设置几个参数
2.reduce()
代码演示:
#1.导入模块 from functools import reduce #reduce() """ 原型:reduce(func,lsd) 作用;函数会对列表中的元素进行累积【会对列表中的元素做指定的运算,具体你的运算由函数决定】 工作原理:用func首先对序列中的第一个和第二个元素进行运算,然后将运算的结果和序列中的第三个元素再接着进行运算。。。 reduce(f,[a,b,c,d]) 等价于f(f(f(a,b),c),d),类似于递归 """ #1.需求:求一个数字列表中所有元素的和 list1 = [1,2,3,4,5] """ sum = 0 for num in list1: sum += num """ #采用reduce实现 #注意;传给reduce的函数,最好是两个参数 def mySum(x,y): return x + y r0 = reduce(mySum,list1) print(r0) #使用匿名函数实现 r1 = reduce(lambda x,y:x + y ,list1) print(r1) #2.需求;将一个整数列表[1,3,5,7,9]转换为13579 """ 1,3-----》13----》1 * 10 + 3 13,5----》135----》13 * 10 + 5 135,7----》1357---->135 * 10 + 7 """ def func(x,y): return 10 * x + y r1 = reduce(func,[1,3,5,7,9]) print(r1) print(type(r1)) r2 = reduce(lambda x,y:10 * x + y,[1,3,5,7,9]) print(r2) #3.需求:通过reduce实现从字符串转换为整型的函数 #“233443”----》233443 #第一步:转换【map()】 def charToNum(s): #"2"--->2 #"5"----->5 #定义一个字典,建立 一个数字和字符串之间的映射关系 digits = {'0':0,'1':1,'2':2,'3':3,"4":4} return digits[s] r3 = map(charToNum,"233443") list1 = list(r3) #第二步:累积【reduce(0)】 r4 = reduce(func,list1) print(r4)
3.filter()
代码演示:
#filter() """ 原型:filter(func,lsd) 功能:通过一定的条件过滤序列中的元素 工作原理:把传入的函数func依次作用于指定的序列,根据返回的是True还是False决定是否保留该元素 """ #1.需求;将指定列表中的偶数筛选出来 list1 = [1,2,3,4,5,6,7,8,9] #列表生成式实现 r0 = [num for num in list1 if num % 2 == 0] print(r0) #使用filter实现 #自定义一套筛选规则 def func(num): #保留偶数元素 if num % 2 == 0: return True #剔除奇数元素 else: return False #依次检测列表中的元素,如果为奇数,返回False,如果是偶数,则返回True,对于filter而言,返回True则是filter需要保留的 r1 = filter(func,list1) print(r1) print(type(r1)) print(list(r1)) #需求:将为"无"的信息筛选掉 data = [["姓名","年龄","爱好"],["tom",17,"无"],["bob",37,"唱歌"]] def func1(value): #比较:最好是同种类型之间进行比较 value = str(value) if value == "无": return False return True for line in data: r2 = filter(func1,line) print(list(r2))
4.sorted()
代码演示:
#1.普通排序 #注意:生成了一个新的列表,默认为升序排序 list1 = [34,2,56,4] #sort() sorted() list2 = sorted(list1) print(list2) print(list1) #2.按照指定的函数排序 list3 = [-19,45,-29,-46,23] #key:可以接收自定义的排序规则 list4 = sorted(list3,key=abs) print(list4) #3.降序排序 list5 = sorted(list1,reverse=True) print(list5) #4.字符也可以排序 list6 = ["f","g","z","y"] list7 = sorted(list6) print(list7) #5.自定义函数;按照字符串的长短排序 def myLen(s): return len(s) list8 = ["gseg","hello","abcczca","f","gahjghajkhegja"] list9 = sorted(list8,key=myLen,reverse=True) print(list9)
三、turtle
1.画布和画笔
代码演示:
import turtle #画布 + 画笔 #设置画布的大小 turtle.screensize(800,600,"green") turtle.done() """ 画笔: pensize():设置画笔的线条的粗细 pencolor():设置画笔的颜色 speed():设置画笔的移动速度 forward(distance);笔尖移动的举例 backward(distance):笔尖后退的距离 right(degree):顺时针旋转degree° left(degree):逆时针旋转degree° pendown():笔尖落下 penup();笔尖抬起 goto():将画笔从一个点移到另外一个点 cirle():画圆,画椭圆,画多边形 fillcolor():填充颜色 """
2.使用
代码演示:
import turtle #绘制正方形 turtle.color("black") turtle.pensize(10) turtle.speed(5) """ turtle.goto(100,0) turtle.goto(100,-100) turtle.goto(0,-100) turtle.goto(0,0) """ turtle.penup() turtle.goto(100,100) turtle.pendown() turtle.goto(0,100) turtle.goto(0,0) turtle.goto(100,0) turtle.goto(100,100) turtle.done
import turtle #绘制三角形 turtle.color("black") turtle.pensize(10) turtle.speed(5) turtle.goto(-100,-100) turtle.goto(100,-100) turtle.goto(0,0) turtle.done()
import turtle #绘制多边形 turtle.color("black") turtle.pensize(10) turtle.speed(5) #steps数值越大,越接近于圆 turtle.circle(100,steps=360) turtle.done()
import turtle #绘制奥运五环 turtle.pensize(10) turtle.speed(10) l = ["red","yellow","blue","black","green"] turtle.color(l[0]) turtle.circle(100) turtle.penup() turtle.goto(150,0) turtle.pendown() turtle.color(l[1]) turtle.circle(100) turtle.penup() turtle.goto(300,0) turtle.pendown() turtle.color(l[2]) turtle.circle(100) turtle.penup() turtle.goto(75,-150) turtle.pendown() turtle.color(l[3]) turtle.circle(100) turtle.penup() turtle.goto(225,-150) turtle.pendown() turtle.color(l[4]) turtle.circle(100) turtle.done()
import turtle import time #画笔颜色,填充颜色 turtle.color("red","yellow") #准备开始填充 turtle.begin_fill() for _ in range(30): turtle.forward(200) turtle.left(160) turtle.end_fill() #类似于turtle.done() turtle.mainloop()