python分析csv文件一节值 不同的个数_使用python对不同版本csv文件的数据进行分析...

#比较不同时间的2个版本服务的接口是否有变化

importosimportcsvimporttime

os.chdir(os.path.dirname(__file__)) #执行目录跳转到本目录

csv_path = '../csv' #存放 swagger csv

current_time = time.strftime('%Y%m%d%H%M%S', time.localtime()) #格式化当前时间

defget_csv_list():"""获取csv目录下的文件列表"""csv_list=[]for path inos.listdir(csv_path):

name, suf=os.path.splitext(path)#筛选出csv文件

if suf == '.csv':

csv_list.append(path)#print(csv_list)

returncsv_listdefparse_list(csv_list):"""把同一服务的不同时间的csv文件放在一个小列表里"""csv_list_sort=[]

csv_list_set= set(map(lambda x: x[:4], csv_list))#print(csv_list_set)

for a incsv_list_set:

a_list=[]for b incsv_list:if b[:4] ==a:

a_list.append(b)

csv_list_sort.append(a_list)#print(csv_list_sort)

returncsv_list_sortdefread_csv_file(csv_name):"""读csv文件,返回一个列表"""csv_list=[]

csvfile_path=os.path.join(csv_path, csv_name)

with open(csvfile_path) as f:

reader=csv.reader(f)for x inreader:

csv_list.append(x)returncsv_listdefdiff_file(file1, file2):"""比较2个文件的不同,读文件,生成列表,变成集合,求并集,分别减并集就是结果"""list1=read_csv_file(file1)#print(list1)

list2 =read_csv_file(file2)#将列表转化为集合

set1 = set([str(x) for x inlist1])#print(set1)

set2 = set([str(x) for x inlist2])#set_more_1 = ()

#set_more_2 = ()

#集合运算

set_1_2 = set1 &set2

set_more_1= set1 -set_1_2

list_more_1= [eval(x) for x inset_more_1]#print(list_more_1)

set_more_2 = set2 -set_1_2

list_more_2= [eval(x) for x inset_more_2]

f= open('../report/接口更改检测报告-{}.txt'.format(current_time), 'a', encoding='utf-8')if not list_more_1 and notlist_more_2 :print("{}接口没有更改".format(file1))

f.write("{}接口没有更改\n".format(file1))if list_more_1 orlist_more_2:print('#' * 100)

f.write('#' * 100 + '\n')print('服务 {} 的接口有更改'.format(file1.split('-')[0]))

f.write('服务 {} 的接口有更改'.format(file1.split('-')[0]) + '\n')print('*'*25, '标准版', '*'*25)

f.write('*'*25 + '标准版' + '*'*25 + '\n')print(file1)

f.write(file1+ '\n')

str_list= ['地址', '方法', '注释', '参数'] #1245

num1 = 1

for x1 inlist_more_1:if len(x1) == 4:

x1.append('没参数')

x1_list= [x1[1], x1[2], x1[4], x1[5]]print('-'*20, num1, '-'*20)

f.write('-'*20 + str(num1) + '-'*20 + '\n')for index in range(4):print('{:<25}: {:<10}'.format(str_list[index], x1_list[index]))

f.write('{:<25}: {:<10}'.format(str_list[index], x1_list[index]) + '\n')

num1+= 1

print('*'*25, '更改后', '*'*25)

f.write('*'*25 + '更改后' + '*'*25 + '\n')print(file2)

f.write(file2+ '\n')

num2= 1

for x2 inlist_more_2:if len(x2) == 4:

x2.append('没参数')print('-'*20, num2, '-'*20)

f.write('-'*20 + str(num2) + '-'*20 + '\n')

x2_list= [x2[1], x2[2], x2[4], x2[5]]for index in range(4):print('{:<25}: {:<10}'.format(str_list[index], x2_list[index]))

f.write('{:<25}: {:<10}'.format(str_list[index], x2_list[index]) + '\n')

num2+= 1f.close()defdiff_file2(file1, file2):"""比较2个文件的不同,读文件,生成列表,变成集合,求并集,分别减并集就是结果"""list1=read_csv_file(file1)

list2=read_csv_file(file2)#将列表转化为集合

set1 = set([str(x) for x inlist1])#print(set1)

set2 = set([str(x) for x inlist2])#集合运算

set_1_2 = set1 &set2

set_more_1= set1 -set_1_2

set_more_2= set2 -set_1_2#将集合重新转化为列表

list_more_1 = [eval(x) for x inset_more_1]

list_more_2= [eval(x) for x inset_more_2]

f= open('../report/接口更改检测报告-{}.txt'.format(current_time), 'a', encoding='utf-8')print("#" * 100)

f.write("#" * 100 + "\n")if list_more_1 orlist_more_2:#print(list_more_1)

#print(list_more_2)

#都存在说明是 之前接口相比现在有变化

print("服务{}的接口变化如下".format(file1[:4]))

f.write("服务{}的接口变化如下".format(file1[:4]) + "\n")for x2 inlist_more_2:print("-" * 40, "接口参数变化", "-" * 40)

f.write("-" * 40 + "接口参数变化" + "-" * 40 + "\n")for x1 inlist_more_1:#路径和方法相同就是同一个接口

#接口变化,好像只是参数变化,那么直接看参数

if x2[1] == x1[1] and x2[2] == x1[2]:

x2_list= [x2[0],x2[4],x2[1],x2[2]]

x2_str_list= ["接口标识", "接口名称", "接口路径", "请求方法"]#如果是字典转化为集合,保留的只是键,不能判断值有什么不同

#把字典转换为 列表-元祖的形式

set_tuple_x2 =set()

set_tuple_x1=set()for key, value in eval(x2[5]).items():

set_tuple_x2.add((key, value))for key, value in eval(x1[5]).items():

set_tuple_x1.add((key, value))#print(set_tuple_x2)

#print(set_tuple_x1)

#集合运算

set_tuple_x2_x1 = set_tuple_x2 &set_tuple_x1

set_tuple_x2_more= set_tuple_x2 -set_tuple_x2_x1

set_tuple_x1_more= set_tuple_x1 -set_tuple_x2_x1if not set_tuple_x1_more andset_tuple_x2_more:#x1 中没有参数,而x2中有参数,说明是接口新增参数

x2_str_list.append("新增参数")

x2_list.append(str(set_tuple_x2_more))for index in range(5):print('{:<25}: {:<10}'.format(x2_str_list[index], x2_list[index]))

f.write('{:<25}: {:<10}'.format(x2_str_list[index], x2_list[index]) + "\n")if set_tuple_x1_more andset_tuple_x2_more:#如果都存在的话,说明之前已经存在的接口参数有变化

#猜测可能是参数类型变化。

x2_str_list.append("之前参数")

x2_str_list.append("现在参数")

x2_list.append(str(set_tuple_x1_more))

x2_list.append(str(set_tuple_x2_more))for index in range(6):print('{:<25}: {:<10}'.format(x2_str_list[index], x2_list[index]))

f.write('{:<25}: {:<10}'.format(x2_str_list[index], x2_list[index]) + "\n")#x2子集 在x1 中遍历,找到退出,找不到,说明新增了一个接口

break

else:#x2 在 x1 中找不到,就是新增了一个接口

print("-" * 40, "新增接口", "-" * 40)

f.write("-" * 40 + "新增接口" + "-" * 40 + "\n")

x2_str_list= ["接口标识", "接口名称", "接口路径", "请求方法"]

x2_list= [x2[0], x2[4], x2[1], x2[2]]for index in range(4):print('{:<25}: {:<10}'.format(x2_str_list[index], x2_list[index]))

f.write('{:<25}: {:<10}'.format(x2_str_list[index], x2_list[index]) + "\n")#还有一种可能是x1 中有,x2中没有,说明是删除了一个接口

for x1 inlist_more_1:for x2 inlist_more_2:#路径和请求方法相同,说明是一个接口

if x2[1] == x1[1] and x2[2] == x1[2]:break

else:#x1 里有,x2里没有,说明是删除了一个接口

print("-" * 40, "被删除的接口", "-" * 40)

f.write("-" * 40 + "被删除的接口" + "-" * 40 + "\n")

x1_str_list= ["接口标识", "接口名称", "接口路径", "请求方法"]

x1_list= [x1[0], x1[4], x1[1], x1[2]]for index in range(4):print('{:<25}: {:<10}'.format(x1_str_list[index], x1_list[index]))

f.write('{:<25}: {:<10}'.format(x1_str_list[index], x1_list[index]) + "\n")else:#说明接口没有变化

print("服务{}的接口没有变化".format(file1[:4]))

f.write("服务{}的接口没有变化".format(file1[:4]) + "\n")

f.close()defdiff_all():"""对比所有的文件,根据一个2维列表"""csv_list=get_csv_list()

csv_list_sort=parse_list(csv_list)#print(csv_list_sort)

for x incsv_list_sort:#todo 修改这里

diff_file2(x[-1], x[-2])if __name__ == '__main__':

csv_path= '../csv' #存放 swagger csv

diff_all()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值