完成附件中的程序,该程序定义了一个行列式的类,从csv文件中读取方阵的内容,程序对文件内容的有效性进行检查,并以异常的方式进行处理。具体要求,见程序注释。
请自定义csv文件对程序进行测试。
# ***************完成题目的时候,不要修改已有的语句,仅增加缺少的语句。*****************
import csv
class SquareMatrix():
#定义一个方阵类
def __init__(self,filename):
# 完成行列式的初始化,行列式只有一个文件名属性,即读入行列式的文件名。
def __enter__(self):
# 完成__enter__函数
try:
file1 = open(self.filename, 'r')
reader = csv.reader(file1)
contents = []
for row in reader:
# 完成该for循环的内容
# 将输入文件中的数据以浮点数的形式储存在contents这个二维列表中。
# 检查contents的行和列,如果行和列不相等,则抛出一个异常RCError.
# RCError类在后面进行定义。
raise RCError() #注意题目要求,已有的语句不能修改。
except Exception as e:
# 完成except语句块
# 如果有异常发生,则打印异常的信息,
# 异常发生时,给对象新增属性contents,contents的属性为空列表[]。
else:
# 此处不做修改。
self.contents = contents
return self
finally:
# 完成finally语句块
# 如果文件file1正常打开,则关闭文件。
def __exit__(self, exc_type, exc_value, trace):
# 此处不修改
print('done')
return False
def getDet(self):
#完成函数,返回该方阵行列式的值。可以选取你擅长的方法计算行列式的值。
return det
class RCError(Exception):
# 完成该异常类的定义。
def __init__ #完成异常类的__init__函数,该异常包含一个名为message的对象属性。
def __str__(self):
return #返回提示文字,以及message的内容。
# 下面的内容可以修改文件名,对程序进行测试。
if __name__ == '__main__':
with SquareMatrix('c.csv') as d1:
print(d1.contents)
print(d1.getDet())# ***************完成题目的时候,不要修改已有的语句,仅增加缺少的语句。*****************
import csv
class SquareMatrix():
#定义一个方阵类
def __init__(self,filename):
# 完成行列式的初始化,行列式只有一个文件名属性,即读入行列式的文件名。
def __enter__(self):
# 完成__enter__函数
try:
file1 = open(self.filename, 'r')
reader = csv.reader(file1)
contents = []
for row in reader:
# 完成该for循环的内容
# 将输入文件中的数据以浮点数的形式储存在contents这个二维列表中。
# 检查contents的行和列,如果行和列不相等,则抛出一个异常RCError.
# RCError类在后面进行定义。
raise RCError() #注意题目要求,已有的语句不能修改。
except Exception as e:
# 完成except语句块
# 如果有异常发生,则打印异常的信息,
# 异常发生时,给对象新增属性contents,contents的属性为空列表[]。
else:
# 此处不做修改。
self.contents = contents
return self
finally:
# 完成finally语句块
# 如果文件file1正常打开,则关闭文件。
def __exit__(self, exc_type, exc_value, trace):
# 此处不修改
print('done')
return False
def getDet(self):
#完成函数,返回该方阵行列式的值。可以选取你擅长的方法计算行列式的值。
return det
class RCError(Exception):
# 完成该异常类的定义。
def __init__ #完成异常类的__init__函数,该异常包含一个名为message的对象属性。
def __str__(self):
return #返回提示文字,以及message的内容。
# 下面的内容可以修改文件名,对程序进行测试。
if __name__ == '__main__':
with SquareMatrix('c.csv') as d1:
print(d1.contents)
print(d1.getDet())
就比如在追加写入的时候,如果我们使用excel就会比较麻烦,会用到xlutils这个库
from xlutils.copy import copy
但是如果我们使用csv的话就很简单
fp = open(filename,'a' , encoding='utf-8', newline='')
参数a的意思就是追加写入,不覆盖原来的内容
接下来我们说用excel打开csv乱码的问题
直接将encoding参数的值改为utf-8-sig
fp = open(filename,'a' , encoding='utf-8-sig', newline='')
之后再用excel打开你用python存好的csv文件乱码问题就完美解决了