Day19-继承和csv文件操作
1、继承
继承就是让子类直接拥有父类属性和方法
父类:被继承者(又叫超类)
子类:继承者
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()
在子类中添加内容
添加类属性和方法
直接在子类中定义新的类属性和新的方法
添加对象属性
添加对象属性的时候如果还想要继承父类的对象属性,必须在子类的__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文件读操作
import csv
csv文件操作必须以行为单位
以列表为单位获取每一行内容
创建列表对应的reader获取文件内容,返回一个迭代器,迭代器中的元素就是每一行内容对应的列表
csv.reader(文件对象)
f=open (‘‘文件名’’, encoding=‘utf-8’, newline=’ ')
(file_content)reader=csv.reader(f)
通过迭代器获取每一行内容对应的元素
print(next(reader))
print(list(reader))
f.close( )
以字典为单位获取每一行内容
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文件写操作
以列表为单位写入一行内容
创建writer对象
writer=csv.writer(文件对象)
with open(‘file/data, csv’ , ‘w’,encoding=‘utf-8’ , newline=’ ') as f:
writer=csv.writer(f)
将数据写入文件中
一次写一行
writer.writerow([‘姓名’, ‘数学’, ‘语文’, ‘英语’])
writer.writerow([‘小明’, 98, 92, 87])
一次写多行
writer.writerows([
[‘张三’, 87, 56, 66],
[‘小花’, 99, 60, 87],
[‘Tom’, 67, 82, 80]
])
以字典为单位写入一行内容
创建writer对象
csv.DictWriter(文件对象, 键列表)
with open(‘files/学生信息.csv’, ‘w’, encoding=‘utf-8’, newline=‘’) as f:
writer = csv.DictWriter(f, [‘name’, ‘age’, ‘tel’, ‘gender’])
将数据写入文件中
将字典的键作为第一行内容写入文件
writer.writeheader()
一次写一行
writer.writerow({'name': '小明', 'age': 18, 'tel': '110', 'gender': '男'})
一次写多行
writer.writerows([
{'name': '小花', 'age': 20, 'tel': '232111', 'gender': '女'},
{'name': '小红', 'age': 23, 'tel': '2342', 'gender': '女'},
{'name': '李华', 'age': 30, 'tel': '3523214', 'gender': '男'}
])
4、虚拟环境
系统环境 - 为了让计算机能够运行Python程序,就必须在计算机中安装Python环境,通过软件安装的这个环境就是系统环境,环境中主要包含解释器和已经安装的所有的第三方库
虚拟环境 - 在计算机已经安装了Python环境的前提下,我们可以通过指令或者相关软件创建出新的Python环境(这个环境就是虚拟环境)
创建虚拟环境的建议
工作的时候:一个项目一个虚拟环境,并且必须将虚拟环境放在工程目录中
学习的时候:一类项目一个虚拟环境,不同类型的环境全部放在一个文件夹中
5、excel文件读操作
import openpyxl
打开excel文件创建文件对应的工作簿
openpyxl.open(文件路径)
openpyxl.load_workbook(文件路径)
workbook = openpyxl.open(‘files/2020年销售数据.xlsx’)
获取工作表
获取所有的工作表的表名: 工作簿对象.sheetnames
names = workbook.sheetnames
print(names)
获取工作表对象
获取活跃表: 工作簿对象.active
sheet1 = workbook.active
print(sheet1)
获取指定表: 工作簿对象[表名]
t_task = workbook[‘task’]
print(t_task)
t_data = workbook[‘data’]
print(t_data)
获取工作表内容
获取最大行数和最大列数
工作表.max_row
工作表.max_column
print(t_task.max_row, t_task.max_column)
print(t_data.max_row, t_data.max_column)
获取单元格: 工作表.cell(行号, 列号)
注意:行号和列号都是从1开始的数据
cell1 = t_data.cell(1, 1)
print(cell1)
cell2 = t_data.cell(7, 5)
print(cell2)
获取单元格内容: 单元格对象.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()
获取第3列所有的数据
for x in range(2, t_data.max_row + 1):
print(t_data.cell(x, 3).value)
获取整个文件所有的数据
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()