day 19-继承和csv文件操作
1.继承
1.继承就是让子类直接拥有父类属性和方法
父类:被继承者(又叫超类)
子类:继承者
2.继承语法
class 类名(父类1, 父类2, 父类3,…):
类的说明文档
类的内容
注意:如果定义类的时候没有写继承,那么这类默认继承Python的基类:object
class 类名: == class 类名(object):
class A:
x = 10
def __init__(self):
self.y = 20
def func1(self):
print('对象方法')
@classmethod
def func2(cls):
print('类方法')
@staticmethod
def func3():
print('静态方法')
class B(A):
pass
print(B.x)
b = B()
print(b.y)
b.func1()
B.func2()
B.func3()
3.在子类中添加内容
1)添加类属性和方法
直接在子类中定义新的类属性和新的方法
2)添加对象属性
添加对象属性的时候如果还想要继承父类的对象属性,必须在子类的_init__方法中通过super()去调用父类的_init__方法
class C(A):
m = 1000
def __init__(self):
# 手动调用当前类的父类的__init__方法
super().__init__()
self.z = 199
def func11(self):
print('C的对象方法')
@classmethod
def func22(cls):
print('C的类方法')
@staticmethod
def func33():
print('C的静态方法')
print(C.x)
print(C.m)
c = C()
c.func1()
c.func11()
C.func2()
C.func22()
C.func3()
C.func33()
print(c.y)
print(c.z)
2. csv文件读操作
csv文件操作必须以行为内容
1.以列表为单位获取每一个内容
1)创建列表对应的rwader对象,获取文件内容,返回一个迭代器,迭代器中的元素就是每一行内容对应的列表
csv.reader(文件对象)
f = open('电影.csv', encoding='utf-8', newline='')
reader = csv.reader(f)
#通过迭代器获取每一行内容对应的元素
print(next(reader))
print(list(reader))
f.close()
2.以字典为单位获取每一行内容
csv.DictReader(文件对象)
with open('电影.csv', encoding='utf-8', newline='') as f:
#直接将第一行内容的数据作为键
#reader = csv.DictReader(f)
# print(next(reader))
# 将第一行内容看成普通数据,将指定的数据作为每一列的键
reader = csv.DictReader(f, fieldnames=['name', 'director', 'star', '上映时间', '国家', '类型','评分','评论人数','封面地址'])
next(reader)
print(next(reader))
3. csv文件写操作
import csv
1.以列表为单位写入一行内容
1)创建writer对象
writer = csv.writer(文件对象)
with open('files/学生成绩.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
# 2)将数据写入文件中
# 一次写一行
writer.writerow(['姓名', '数学', '语文', '英语'])
writer.writerow(['小明', 98, 92, 87])
# 一次写多行
writer.writerows([['张三', 87, 56, 66],
['小花', 99, 60, 87],
['Tom', 67, 82, 80]
])
2.以字典为单位写入一行内容
1)创建writer对象
csv.DictWriter(文件对象, 键列表)
with open('files/学生成绩.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.DictWriter(f, ['', '', '', ''])
# 2)将数据写在文件中
# 将字典的键作为第一行内容写入文件
writer.writeheader()
# 一次写一行
writer.writerow({'name': '小明', 'age': 18})
# 一次多行
writer.writerows([
{'name': '小花', 'age': 20, 'tel': '232111', 'gender': '女'},
{'name': '小红', 'age': 23, 'tel': '2342', 'gender': '女'},
{'name': '李华', 'age': 30, 'tel': '3523214', 'gender': '男'}
])
4.虚拟环境
1.系统环境
为了让计算机能够运行Python程序,就必须在计算机中安装Python环境,通过软件安装的这个环境就是系统环境。
环境中主要包含解释器和已经安装的所有的第三方库
2.虚拟环境
在计算机已经安装了Python环境的前提下,我们可以通过指令或者相关软件创建出新的Python环境(这个环境是虚拟环境)
3.创建虚拟环境的建议
工作的时候:一个项目一个虚拟环境,并且必须将虚拟环境放在工程目录中
学习的时候:—类项目一个虚拟环境,不同类型的环境全部放在一个文件夹中
5. excel文件读操作
import openpyxl
1…打开excel文件创建文件对应的工作簿
# openpyxl.open(文件路径)
# openpyxl.load_workbook(文件路径)
workbook = openpyxl.open(f'files/2020年销售数据.xlsx')
2.获取工作表
1)获取所有的工作表的表名:工作簿对象.sheetnames.
names = workbook.sheetnames
print(names)
2)获取工作表对象
a.获取活跃表:工作簿对象.active
sheet1 = workbook.active
print(sheet1)
b.获取指定表:工作簿对象[表名]
t_task = workbook['task']
print(t_task)
t_data = workbook['data']
print(t_data)
3.获取工作表内容
1)获取最大行数和最大列数
工作表.max_row
工作表.max_column
print(t_task.max_row, t_task.max_column)
print(t_data.max_row, t_data.max_column)
2)获取单元格:工作表.cell(行号, 列号)
注意:行号和列号都是从1开始的数据
cell1 = t_data.cell(1, 1)
print(cell1)
cell2 = t_data.cell(7, 5)
print(cell2)
3)获取单元格内容:单元格对象.value
print(cell1.value)
print(cell2.value)
获取第2行所有的数据
for x in range(1, t_data.max_column+1):
print(t_data.cell(2, x).value, end=',')
print()
获取整个文件所有的数据
for row in range(1, t_data.max_row + 1):
for col in range(1, t_data.max_column + 1):
print(t_data.cell(row, col).value, end=',')
print()