python的csv文件读写+python高阶函数+python画图turtle

一、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()
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值