【Python实战】-- 通过计算指定区域的平方和判断所有目录中否有重复文件

系列文章目录

文章目录

  • 系列文章目录
  • 前言
  • 一、 通过计算指定区域的平方和判断所有目录中否有重复文件
    • 1.需求
    • 2.代码(整理版)
    • 3.代码(原始版)
  • 总结


前言

一、 通过计算指定区域的平方和判断所有目录中否有重复文件

1.需求

有成千上万的测试数据文件
查询文件中特定值对应的单元格位置
计算指定区域的平方和
生成字典,去重,判断是否有重复文件

2.代码(整理版)

#xlwt只支持xls格式,xlsx格式需要用openpyxl或pandas
import pandas as pd
import os 
import xlrd
import xlwt
import csv
import openpyxl
import glob
from collections import Counter
from openpyxl import Workbook
from openpyxl import load_workbookglobal_var = None
global_var_r = Nonedef some_function():global global_varglobal global_var_r#定义读取csv_pandas
def read_csv_file(file_path):#参数:error_bad_lines=False跳过错误的行 delimiter=',',encoding = 'gbk',header = 0, engine='python'  sep = r"\s+\s{0}"  encoding = "iso-8859-1",error_bad_lines=Falsereturn pd.read_csv(file_path,encoding = 'latin1',sep = r"\s+\s{0}",dtype=object,quotechar="'",delimiter=',',doublequote=True,engine="python",usecols=lambda column: column != 0,header = row_heard)  file_paths = []
def find_dir_name(path,file_name):file_names = os.listdir(path)file_dict = {}    for file_name in file_names:#print('当前目录:%s' % path+'\\'+file_name)file_dict[file_name] = {}       if os.path.isdir(path+'\\'+file_name):file_dict[file_name] = find_dir_name(path+'\\'+file_name,file_name)print('当前目录:%s' % path + '\\' + file_name)file = 'Data0_mtf.csv'full_path = os.path.join(path+'\\'+file_name,file)if os.path.exists(full_path):file_path = path+'\\'+file_name+'\\'+file      file_paths.append(file_path)else:passelse:passreturn file_pathsdef search_str(filename,search_char):global global_var  #将读取的函数计算结果设置为全局变量,我们可以先定义全局变量,然后在函数内部通过全局变量声明修改global global_var_rresult = []try:with open(filename,'r') as csvfile:csvreader = csv.reader(csvfile, delimiter=",")  row_index = 0      for row in csvreader:            col_index = 0for cell in row:if search_char == cell:result.append((row_index,col_index))for row1,col1 in result:global_var = col1global_var_r = row1 col_index += 1row_index += 1except:passdef get_top_nine_dirs(file_path):#分割路径并移除文件名parts = file_path.split(os.path.sep)#获取前9级目录#top_nine_dirs = os.path.sep.join(parts[:9])#获取第9级目录top_nine_dirs = os.path.sep.join(parts[8])print(top_nine_dirs)return top_nine_dirsdef has_duplicateds(d):values_counter = Counter(d.values())return any(count > 1 for count in values_counter.values())if __name__ == '__main__':#file_dir = input("请输入查重路径: \n")file_dir = r'\\10.99.10.142\6号楼信息恢复\6号楼--品保--勿删\抽检\2024年'data = find_dir_name(file_dir,'Data0_mtf.csv')square_sums = []fl_lst = list(filter(lambda x:x.find("Data0_mtf.csv")>=0,data)) i = 0for item in fl_lst:print(item)j = len(fl_lst)i = i + 1print('本次查询共'f'{j}''个文件,当前为第'f'{i}''个文件')position = search_str(item,'1S')row_heard = global_var_rcol_character = global_var df = read_csv_file(item)#print(df)col_character2 = col_character + 100row_num = len(df)print('发现共'f'{row_num}''行数据,''第'+f'{row_heard}'+'行作为标题行')col_num = df.shape[1]df.iloc[:row_num,col_character] = pd.to_numeric(df.iloc[:row_num,col_character],errors='coerce')df.iloc[:row_num,col_character2] = pd.to_numeric(df.iloc[:row_num,col_character2],errors='coerce')value = df.iloc[0,col_character]value1 = df.iloc[0,col_character2]value2 = df.iloc[1,col_character]value3 = df.iloc[1,col_character2]if value  != 0 or value2 != 0:#print('1S列首行数据:' f'{value,value2}''计算平方和')print('正在进行数据分析……')elif value == 0 and value2 == 0:#print('51S列首行数据:' f'{value1,value3}''计算平方和')print('正在进行数据分析……')else:print("请检查数据是否正确")column_data1 = df.iloc[0:row_num,col_character]column_data2 = df.iloc[0:row_num,col_character2]#print(column_data1,'  \n ',column_data2)square_sum = sum(map(lambda x: x**2,column_data1))square_sum2 = sum(map(lambda x: x**2,column_data2))if square_sum != 0:square_sums.append(square_sum)elif square_sum == 0:square_sums.append(square_sum2)else:print("计算错误")value_dict = dict(zip(data,square_sums))#print(value_dict)duplicate_values = {}for key, value in value_dict.items():if value in duplicate_values:duplicate_values[value].append(key)else:duplicate_values[value] = [key]duplicate_values = {k:v for k, v in duplicate_values.items() if len(v)>1}if has_duplicateds(value_dict):print("存在重复值")else:print("无重复值,请继续保持")df = pd.DataFrame()wb = Workbook()ws = wb.activews.title = 'Summary'n = 1for key,keys_list in duplicate_values.items():print(f"值{key}对应的文件有:{','.join(keys_list)}")keys = ws.cell(row = n,column = 1).value = keya = n + 1b = len(keys_list)for m in range(len(keys_list)):   key_lists = ws.cell(row = a+m,column = 1).value = keys_list[m]n = a + b          wb.save('output.xlsx')

3.代码(原始版)

#xlwt只支持xls格式,xlsx格式需要用openpyxl或pandas
import pandas as pd
import os 
import xlrd
import xlwt
import csv
import openpyxl
import glob
from collections import Counter
from openpyxl import Workbook
from openpyxl import load_workbookglobal_var = None
global_var_r = Nonedef some_function():global global_varglobal global_var_r#定义读取csv_pandas
def read_csv_file(file_path):#参数:error_bad_lines=False跳过错误的行 delimiter=',',encoding = 'gbk',header = 0, engine='python'  sep = r"\s+\s{0}"  encoding = "iso-8859-1",error_bad_lines=Falsereturn pd.read_csv(file_path,encoding = 'latin1',sep = r"\s+\s{0}",dtype=object,quotechar="'",delimiter=',',doublequote=True,engine="python",usecols=lambda column: column != 0,header = row_heard)  file_paths = []
def find_dir_name(path,file_name):file_names = os.listdir(path)file_dict = {}    for file_name in file_names:#print('当前目录:%s' % path+'\\'+file_name)file_dict[file_name] = {}       if os.path.isdir(path+'\\'+file_name):file_dict[file_name] = find_dir_name(path+'\\'+file_name,file_name)print('当前目录:%s' % path + '\\' + file_name)file = 'Data0_mtf.csv'full_path = os.path.join(path+'\\'+file_name,file)if os.path.exists(full_path):file_path = path+'\\'+file_name+'\\'+file      file_paths.append(file_path)else:passelse:passreturn file_pathsdef search_str(filename,search_char):global global_var  #将读取的函数计算结果设置为全局变量,我们可以先定义全局变量,然后在函数内部通过全局变量声明修改global global_var_rresult = []try:with open(filename,'r') as csvfile:csvreader = csv.reader(csvfile, delimiter=",")  row_index = 0      for row in csvreader:            col_index = 0for cell in row:if search_char == cell:result.append((row_index,col_index))#print(result)#print(f"Cell data:{cell},Row index:{row_index},Column index:{col_index}")#print('已查到该值',cell)for row1,col1 in result:#data_row = list(csvreader)#num_rows = len(data_row)#print(f'"{search_char}"在第{row1}行,第{col1}列被找到')#print(f'总行数:"{num_rows}"')global_var = col1global_var_r = row1 col_index += 1row_index += 1except:passdef get_top_nine_dirs(file_path):#分割路径并移除文件名parts = file_path.split(os.path.sep)#获取前9级目录#top_nine_dirs = os.path.sep.join(parts[:9])#获取第9级目录top_nine_dirs = os.path.sep.join(parts[8])print(top_nine_dirs)return top_nine_dirsdef has_duplicateds(d):values_counter = Counter(d.values())return any(count > 1 for count in values_counter.values())if __name__ == '__main__':#file_dir = input("请输入查重路径: \n")file_dir = r'\\10.99.10.142\6号楼信息恢复\6号楼--品保--勿删\抽检\2024年'#file_dir = r'D:\Users\gxcaoty\Desktop\性能覆盖率\data'#root,dirs,files = get_allfile_msg(file_dir)#allFile_url = get_allfile_url(root,files)data = find_dir_name(file_dir,'Data0_mtf.csv')square_sums = []fl_lst = list(filter(lambda x:x.find("Data0_mtf.csv")>=0,data)) i = 0for item in fl_lst:print(item)j = len(fl_lst)i = i + 1print('本次查询共'f'{j}''个文件,当前为第'f'{i}''个文件')position = search_str(item,'1S')row_heard = global_var_rcol_character = global_var df = read_csv_file(item)#print(df)col_character2 = col_character + 100row_num = len(df)print('发现共'f'{row_num}''行数据,''第'+f'{row_heard}'+'行作为标题行')col_num = df.shape[1]df.iloc[:row_num,col_character] = pd.to_numeric(df.iloc[:row_num,col_character],errors='coerce')df.iloc[:row_num,col_character2] = pd.to_numeric(df.iloc[:row_num,col_character2],errors='coerce')value = df.iloc[0,col_character]value1 = df.iloc[0,col_character2]value2 = df.iloc[1,col_character]value3 = df.iloc[1,col_character2]if value  != 0 or value2 != 0:#print('1S列首行数据:' f'{value,value2}''计算平方和')print('正在进行数据分析……')elif value == 0 and value2 == 0:#print('51S列首行数据:' f'{value1,value3}''计算平方和')print('正在进行数据分析……')else:print("请检查数据是否正确")column_data1 = df.iloc[0:row_num,col_character]column_data2 = df.iloc[0:row_num,col_character2]#print(column_data1,'  \n ',column_data2)square_sum = sum(map(lambda x: x**2,column_data1))square_sum2 = sum(map(lambda x: x**2,column_data2))if square_sum != 0:square_sums.append(square_sum)elif square_sum == 0:square_sums.append(square_sum2)else:print("计算错误")value_dict = dict(zip(data,square_sums))#print(value_dict)duplicate_values = {}for key, value in value_dict.items():if value in duplicate_values:duplicate_values[value].append(key)else:duplicate_values[value] = [key]duplicate_values = {k:v for k, v in duplicate_values.items() if len(v)>1}if has_duplicateds(value_dict):print("存在重复值")else:print("无重复值,请继续保持")df = pd.DataFrame()wb = Workbook()ws = wb.activews.title = 'Summary'n = 1for key,keys_list in duplicate_values.items():print(f"值{key}对应的文件有:{','.join(keys_list)}")#df[key] = keys_list#df = df.explode(key).reset_index(drop=True)keys = ws.cell(row = n,column = 1).value = keya = n + 1b = len(keys_list)for m in range(len(keys_list)):   key_lists = ws.cell(row = a+m,column = 1).value = keys_list[m]n = a + b  wb.save('output.xlsx')'''keys = list(duplicate_values.keys())values_lists = list(duplicate_values.values())values_series_list = [pd.Series(values) for values in values_lists]df = pd.concat(values_series_list,keys = keys).reset_index(level=1,drop=True).to_frame('路径')df['values'] = df.indexdf.reset_index(inplace=True)df.drop(columns='index',inplace=True)print(df)'''#df.to_excel('output.xlsx',index=False)

总结

分享:
一个新的生活的开始,是自己给与自己的希望,是自己带给自己的快乐,更是自己原谅过去,面对将来的挑战;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/498019.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

京存SAN助力电子病历建设

引言 随着信息技术的快速发展,电子病历系统(EMR)已成为现代医疗的重要组成部分。电子病历不仅能够提高医疗服务的效率和质量,还能更好地保护患者的隐私和数据安全。作为国内领先的存储解决方案提供商,京存存储凭借其卓越的技术实力和丰富的实…

python利用selenium实现大麦网抢票

大麦网(damai.cn)是中国领先的现场娱乐票务平台,涵盖演唱会、音乐会、话剧、歌剧、体育赛事等多种门票销售。由于其平台上经常会有热门演出,抢票成为许多用户关注的焦点。然而,由于票务资源的有限性,以及大…

【疑难杂症】 HarmonyOS NEXT中Axios库的响应拦截器无法拦截424状态码怎么办?

今天在开发一个HarmonyOS NEXT的应用的时候,发现http接口如果返回的状态码是424时,我在axios中定义的拦截器失效了。直接走到了业务调用的catch中。 问题表现: 我的拦截器代码如下: 解决办法: 先说解决办法&#xff…

芊芊手印网站

据说25年是佛灯火(木火之年),财运之年 芊芊手印网站链接:芊芊手印-手相纹理素描线稿提取工具

“Gold-YOLO:基于聚合与分发机制的高效目标检测新范式”

🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年12月26日8点00分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文源地址(有视频&#xf…

工厂+策略模式之最佳实践(疾病报卡维护模块API设计)

目录 💻业务场景 🔧应用技术 ⚙概要流程 ❗开发注意 服务类上标注了 自定义注解 却无法直接利用getDeclaredAnnotation 获取 *Spring代理机制 代理机制的工作原理 代理的工作机制 代理的使用场景 已获取EmrXXXServiceImpl 的Class,如…

Linux驱动开发 IIC I2C驱动 编写APP访问EEPROM AT24C02

在嵌入式开发中,I2C(Inter-Integrated Circuit)是一种常用的串行通信协议,广泛应用于与外设(如 EEPROM、传感器、显示屏等)进行数据交换。AT24C02 是一种常见的 I2C EEPROM 存储器,它提供 2Kbit…

闭包的理解

什么是闭包 在函数内层的作用域中访问函数外层的作用域中的变量,就形成了一个闭包,闭包会使其私有变量的生命周期得到提升至与外层作用域一致。 闭包特性: 1.拥有私有变量 2. 延长私有变量的生命周期 一般函数中的变量在函数被执行完成之…

实景三维点云处理专业软件ArcGIS根据DSM生成地表点云集

常见的实景三维处理软件及其特色功能如下: 一、专业实景三维建模软件 Agisoft Metashape 高精度建模:能够生成高精度的三维模型,精度可以达到厘米级甚至毫米级,适用于需要详细测量和分析的项目,如文物保护和建筑测量。…

计算机网络-L2TP Over IPSec基础实验

一、概述 上次我们进行了标准L2TP的配置,但是在最后我们在进行业务流量访问时看到流量是没有进行加密的,这就导致可能得安全风险,所以这里其实可以退像GRE那样调用IPSec框架来进行加密保护。 拓扑 数据不加密 现在需要配置IPSec,然…

怎么在VMware Workstation上安装Win11虚拟机?

Windows11虚拟机是免费的吗? Windows 11 虚拟机本身并不是免费的。你需要一个合法的 Windows 11 许可证才能在虚拟机中运行。不过,许多虚拟机软件(如 VirtualBox 和 VMware Workstation Player)本身是免费的,允许你创…

时间敏感网络中全面分析与调度的模型驱动方法

论文:A Model-Driven Approach for the Comprehensive Analysis and Scheduling in Time-Sensitive Networks》 背景与动机 TSN 的发展与应用领域:自 2012 年起,IEEE 802.1 TSN 任务组致力于开发通信标准,增强 IEEE 802 网络&…

重生之我在异世界学编程之数据结构与算法:深入队列篇

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 目录 一、概述二、链表节点结构三、队列结构四、基…

SpringCloudAlibaba技术栈-Dubbo

1、什么是Dubbo? 简单来说,dubbo就像是个看不见的手,负责专门从注册中心nacos调用注册到nacos上面的服务的,因为在微服务环境下不同的功能模块可能在不同的服务器上。dubbo调用服务就像是在调用本地的服务一样。 分布式调用与高并发处理 Du…

智慧城市超声波气象站

智慧城市超声波气象站是一种现代化的气象监测设备,它利用超声波技术能够实时、精确地监测和记录多种关键气象要素。以下是智慧城市超声波气象站的主要功能: 一、高精度气象监测 风速风向测量:超声波气象站的核心部件是超声波风速风向仪&…

时间关系推理:利用大型语言模型检测股票投资组合崩溃

“Temporal Relational Reasoning of Large Language Models for Detecting Stock Portfolio Crashes” 论文地址:https://arxiv.org/pdf/2410.17266 摘要 当股票投资组合遭遇如2007年金融危机或2020年因COVID-19导致的股市暴跌这样的罕见事件时,传统的…

IndexOf Apache Web For Liunx索引服务器部署及应用

Apache HTTP Server 是一款广泛使用的开源网页服务器软件,它支持多种协议,包括 HTTP、HTTPS、FTP 等 IndexOf 功能通常指的是在一个目录中自动生成一个索引页面的能力,这个页面会列出该目录下所有的文件和子目录。比如网上经常看到的下图展现的效果,那么接下来我们就讲一下…

【C++】BC89 包含数字9的数

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述题目名称:BC89 包含数字9的数 💯代码实现与分析代码结构详解 💯代码执行逻辑示例💯优化与改进改进版代码改进点详解…

解决Windows无法同时使用有线网和无线网WIFI的问题

参考资料 电脑无线网wifi和有线网同时使用(内网外网同时使用)用route命令解决Wifi和网卡不能同时上内外网问题 解决方法 对于Windows系统同时连接有线网和无线网Wifi时,只会有一个网关生效,因此我们需要手动通过route命令设置网…