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)