day17-csv文件excel文件操作和面向对象编程

day17 - csv文件和excel文件操作和面向对象编程(10.12)

1、python读取csv文件

python读取csv文件–读取csv文件
建立文件夹-ctrl+c–ctrl+v加入csv文件(取消)

utf-8-sig–>带签名的UTF-8–>有字节序标记(为保证读取的万无一失)

import csv
with open('resources/2018年北京积分落户数据.csv', 'r', encoding='utf-8-sig') as file:
	#方法一读取
    # content = file.readline()  #一行一行读取内容
    # while content:
    #     print(content, end='')
    #     content = file.readline() # 直到读取不到数据截止
	# 方法二读取(csv.reader方法读取)
    # delimiter参数默认是逗号,但是如果值不是用逗号分隔的就要重新指定
    # quotechar参数默认值是引号,但是如果值不是用引号包围的就要重新指定
    reader = csv.reader(file, delimiter=',', quotechar='"') # 阅读器 [观察文件内容分隔号是什么]
    for line in reader:
        print(type(line)) # 列表
        print(line)

2、python将数据写入csv文件

"""
将数据写入csv文件
"""
# utf-8-sig-->带签名的UTF-8-->有字节序标记(为保证读取的万无一失)
import csv

with open('resources/2018年北京积分落户数据.csv', 'a', encoding='utf-8-sig', newline='') as file:
    writer = csv.writer(file, delimiter=',')  # file文件对象 ,newline=''去掉新的多的空行
    writer.writerow(['6020', '陈来', '1981-06', '北京宝洁技术有限公司', '90.75'])  # 写一行
    writer.writerows([
        ['6021', '陈来', '1981-06', '北京宝洁技术有限公司', '90.75'],
        ['6022', '陈来', '1981-06', '北京宝洁技术有限公司', '90.75'],
        ['6023', '陈来', '1981-06', '北京宝洁技术有限公司', '90.75']
    ])  # 写多行数据

3、读csv文件写入excel文件中

练习:读csv写成excel
写excel需要三方库的支持,先安装pip install openpyxl 再导入openpyxl
pip list 查看已经装好的三方库
代码的标准顺序:先标准库 ->三方库 -> 代码,按照字母顺序写

# 1)自己练习
import csv

import openpyxl

# 写excel需要三方库的支持,先安装pip install openpyxl 再导入openpyxl
# pip list 查看已经装好的三方库
# 代码的标准顺序:先标准库 ->三方库 -> 代码,按照字母顺序写
from openpyxl.styles import Font, Alignment

workbook = openpyxl.Workbook()
sheet = workbook.active

with open('resources/2018年北京积分落户数据.csv', 'r', encoding='utf-8-sig') as file:
    reader = csv.reader(file, delimiter=',', quotechar='"')
    for line in reader: # 列表数据
        sheet.append(line) # sheet.append(序列)
    workbook.save('北京积分落户数据.xlsx')

#2) teacher 答案

workbook = openpyxl.Workbook()
sheet = workbook.active  # 获取第一个sheet1
sheet.title = '2018年'  # 修改第一个表格名称
with open('resources/2018年北京积分落户数据.csv', 'r', encoding='utf-8-sig') as file:
    reader = csv.reader(file, delimiter=',', quotechar='"')  # 分隔号,包裹号“。
    for line in reader:
        sheet.append(line)  # 追加一行数据
# 修改指定行的高度
sheet.row_dimensions[1].height = 40 #第一行维度从1开始,高度
# 修改指定列的宽度
col_width = {
    'A': 30,
    'B': 50,
    'C': 60,
    'D': 180,
    'E': 50
}
for key in col_width:
    sheet.column_dimensions[key].width = col_width[key]
#1) sheet.cell(1,1) # 第一行第一列单元格对象
#修改单元格的格式
for col in range(1, 6):
    sheet.cell(1, col).font = Font(name='微软雅黑', size=22, bold=True, color='0000FF') # 修改字体 ,颜色表
    sheet.cell(1, col).alignment = Alignment(horizontal='center', vertical='center') # 水平,垂直方向居中
workbook.save('resources/2018年北京积分落户数据.xlsx')
# 读取excel文件

4、*python读取excel文件数据

"""
04-python读取excel数据
"""
import openpyxl

# 加载excel文件 --> workbook
workbook = openpyxl.load_workbook('resources/口罩销售数据.xlsx') # 加载工作簿
# 获取所有工作表的名字
print(workbook.sheetnames) # 获取表格名称
# 方法一
# workbook.worksheets[0] #第一个工作表
# 获取第一个工作表--》worksheet
sheet = workbook.worksheets[0]
print(sheet)

# 两种方式获取单元格的数据
print(sheet.cell(3, 4).value) # 王大刀
print(sheet['D3'].value) # 王大刀

# 单元格的范围
print(sheet.dimensions) #A1:G1000
# 获取表达的行数和列数
print(sheet.max_row, sheet.max_column)

# 循环遍历所有的数据
# 1)方法一
for row in range(1, sheet.max_row+1):
    for col in range(1, sheet.max_column+1):
        print(sheet.cell(row, col).value, end='\t')
    print()
# 2)方法二
for row in range(2, sheet.max_row+1):
    for col in 'ABCDEF':
        print(sheet[f'{col}{row}'].value, end='\t')
    print()

5、面向对象编程

“”"
面向对象编程(OOP)(询问之后的内容,每天的内容)
用对象的概念将数据和操作数据的函数从逻辑上组织成一个整体
在面向对象的世界里,我们要解决任何问题都是通过先创建对象,然后给对象发出消息。

1.对象 - 接收消息的实体 —> 具体概念
1)一切皆为对象
2)每个对象都是独一无二的
3)对象都有静态特征(属性)和动态特征(行为)
4)对象一定属于某个类
2.类 - 对象的蓝图和模板 —> 抽象概念
1)(每个单词首字母大写)
2)写在类里面的函数叫方法
3)def init(self):初始化,self对象

*面向对象编程的实施步骤:
1.定义类
1)数据抽象:给出对象的静态特征–>属性
2)行为抽象:给出对象的动态特征–>行为
2.创建对象—> 构造器语法是类名()
3.给对象发消息 对象.

“”"
“”"
类:笔
对象:我黑色签字笔
属性(静态特征):(名词)形状(长方形圆筒状),笔芯(黑色笔芯,尖头)0.35,厂家,晨光的。
行为(动态特征):书写(动词)
“”"

第一步:定义类

class Rectangle:
    """矩形"""
    # 静态属性
    def __init__(self, width, height): # (矩形对象,属性)
        """
        初始化方法
        :param width: 矩形的宽度
        :param height: 矩形的高度
        """
        self.width = width
        self.height = height # 给矩形对象初始化属性,指定高度(数据抽象)

    # 动态特征
    def perimeter(self):
        """计算周长"""
        return (self.width+self.height) * 2 # 周长
    def area(self):
        """计算面积"""
        return self.width * self.height

第二步:创建对象—> 构造器语法是类名()

rect = Rectangle(width=3, height=5) # 位置传参,矩形对象 自动调用__init__

第三步:给对象发消息 对象.

print(f'矩形的周长:{ rect.perimeter()}') # 矩形的周长:16
print(f'矩形的面积:{ rect.area()}') # 矩形的面积:15

请添加图片描述

练习1:定义一个学生类:姓名。年龄。吃饭,玩耍,学习

class Student:
    """学生"""
    def __init__(self, name, age):
        """
        初始化方法
        :param name:姓名
        :param age: 年龄
        """
        self.name = name
        self.age = age

    def eat(self):
        """吃饭"""
        print(f'{self.name}正在吃饭')
    def play(self):
        """玩耍"""
        print(f'{self.name}正在玩耍')
    def study(self, course_name):![请添加图片描述](https://img-blog.csdnimg.cn/12ae82dae3a54a97b09433d1f93c36bc.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQTE2NjA2MDEyMDAw,size_20,color_FFFFFF,t_70,g_se,x_16)

        """
        学习
        :param course_name: 课程名称
        :return:
        """
        print(f'{self.name}正在学习{course_name}')
stu1 = Student('陈来', 20) # 位置传参
stu2 = Student('小兰', 17)

stu1.play()
stu1.eat()
stu2.study('python学习')

请添加图片描述

练习2:

面向对象编程:练习2:游泳池圆的,半径未知,外面有一个同心圆过道(宽度3m),装修每平方米28.5,围墙每米38.2
两个对象
三步走:定义类->创建对象->通过给对象发消息解决问题

# 自己的练习
import math


class Circle:

    def __init__(self, r):
        self.r = r

    def guodao(self):
        t1 = (3.14*(self.r+3)**2 - 3.14*(self.r**2))*28.5
        return t1

    def weiqiang(self):
        t2 = 2*3.14*(self.r+3)*38.2
        return t2

rect = Circle(r=3)

print(f'装修过道的花销:{rect.weiqiang()}元')
print(f'装修围墙的花销:{rect.guodao()}元')

# teacher 答案
class Circle:

    def __init__(self, radius):
        self.radius = radius

    def perimeter(self):
        return 2 * math.pi * self.radius

    def area(self):
        return math.pi * self.radius ** 2

r = float(input('请输入游泳池的半径:'))
c1, c2 = Circle(r), Circle(r+3)
fence_price = c2.perimeter() * 38.2
aisle_price = (c2.area() - c1.area()) * 28.5
print(f'过道的造价是:{aisle_price:.2f}元')
print(f'围墙的造价是:{fence_price:.2f}元')

请添加图片描述
请添加图片描述

练习3:

练习3:定义类描述数字时钟:时分秒,行为让它走起来,显示时间
三步走:定义类(数据抽象,行为抽象)->创建对象->通过给对象发消息解决问题
变量,函数的命名:snake_case
类命名:CamelNotation
多总结多复盘,英语,打字速度
作业1倒计时计时器,倒计时1分钟。00:00:00结束

import os
import time


class Clock:

    def __init__(self, hour=0, minute=0, second=0):
        self.hour = hour
        self.minute = minute
        self.second = second

    def go(self):
        self.second += 1
        if self.second == 60:
            self.second = 0
            self.minute += 1
            if self.minute == 60:
                self.minute = 0
                self.hour += 1
                if self.hour == 24:
                    self.hour = 0

    def show(self):
        return f'{self.hour}时,{self.minute}分,{self.second}秒'

# rect = Clock(2, 4, 20)
#
# while True:
#     print(f'时间显示:{rect.show()}')
#     time.sleep(2)
#     rect.go()

# teacher 答案

class Clock:

    def __init__(self, hour=0, minute=0, second=0, mode_12=False):
        """
        初始化方法
        :param hour: 时
        :param minute: 分
        :param second: 秒
        """
        self.hour = hour
        self.minute = minute
        self.sconde = second
        self.mode_12 = mode_12 #12小时
    def show(self): #def show(self,mode_12=False):clock.show(True)
        """显示时间"""
        # 07:01:02
        if self.mode_12:
            if self.hour <12:
                return f'{self.hour:0>2d}:{self.minute:0>2d}:{self.sconde:0>2d} AM'
            else:
                hour = self.hour -12 if self.hour >12 else self.hour #三目
                return f'{hour:0>2d}:{self.minute:0>2d}:{self.sconde:0>2d} PM'
        return f'{self.hour:0>2d}:{self.minute:0>2d}:{self.sconde:0>2d}'

    def run(self):
        """走字"""
        self.sconde += 1
        if self.sconde == 60:
            self.sconde = 0
            self.minute += 1
            if self.minute == 60:
                self.minute = 0
                self.hour += 1
                if self.hour == 24:
                    self.hour = 0

clock = Clock(12,12,12,mode_12=True)
while True:
    # 通过os模块的system函数调用系统命令(Terminal终端)
    # 清屏:windows->cls/macOS-->
    # os.system('clear')
    print(clock.show())
    time.sleep(1)
    clock.run()

最后文件附录

1、优化导入工具

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dXRCvKv0-1634037226419)(C:\Users\z\Desktop\tupian\10.12\2.png)]

2、颜色编码表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1RmQXax4-1634037226421)(C:\Users\z\Desktop\tupian\10.12\6.png)]
if self.hour == 24:
self.hour = 0

clock = Clock(12,12,12,mode_12=True)
while True:
# 通过os模块的system函数调用系统命令(Terminal终端)
# 清屏:windows->cls/macOS–>
# os.system(‘clear’)
print(clock.show())
time.sleep(1)
clock.run()


### 最后文件附录

1、优化导入工具

![请添加图片描述](https://img-blog.csdnimg.cn/0dfd082e97174c24adb55754b48d1ec2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQTE2NjA2MDEyMDAw,size_11,color_FFFFFF,t_70,g_se,x_16)


2、颜色编码表

![请添加图片描述](https://img-blog.csdnimg.cn/0efe30955da14c24af783f0f8d2777d4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQTE2NjA2MDEyMDAw,size_20,color_FFFFFF,t_70,g_se,x_16)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值