实例3:python 删除excel中的多余列
实例所用资源:https://download.csdn.net/download/weixin_46623003/16096875
一、数据情况
1、原数据
1.xlsx和2.xlsx的内容如下,33.txt内容为空
2、结果(用openpyxl运行的结果)
1)New folder:
2)存放报错结果的文件夹:Faild(此处报错是因为openpyxl只能打开.xlsx文件)
3)存放结果的文件夹:Result
二、python实现过程
1、openpyxl
特定:操作简单,不需要安装excel软件,只能处理.xlsx文件
运行时间:
1.xlsx 删除多余字段完成!2.xlsx 删除多余字段完成!-------------------所有操作已完成!!time cost: 0.03686380386352539 s
代码:
import os
import openpyxl
import timepath = r'C:\个人文件夹\Data analysis learning\skit-learn\Workspace\document_vscode\test2\New folder' # 放需要删除多余列的excel的文件夹
column_save = ['1_name','3_name','5_name','7_name','科目编码'] # 需要保留的字段# 一、创建目录(文件夹)
def mkdir(root, folder):# 去除两端空白字符--如果strip()的参数为空,那么会默认删除字符串头和尾的空白字符(包括\n,\r,\t)root = root.strip() # 判断路径是否存在,存在:True、不存在:FalseisExists = os.path.exists(root+'/'+folder) # 判断结果if not isExists: # 如果不存在则创建目录# 创建目录操作函数os.makedirs(root+'/'+folder)print(folder + ' 创建成功\n')# 注释掉# else: # 如果目录存在则不创建,并提示目录已存在 # print(folder + ' 目录已存在')# 二、创建添加txt文件
def mktxt(root, txt_name, file):txt_path = root+'/'+txt_namewith open( txt_path, 'a' ) as f: # 以追加的方式打开文件,a:文件存在则追加内容,不存在则新建文件f.writelines('%s 内容修改失败\n' %file)# 三、获取指定类型的文件名称
def read_file(path, file_type): #path 是指需要提取的文件夹所在路径;file_type是指文件的拓展名;txt格式的文件则输入‘.txt’ filenames = os.listdir(path) files = []for filename in filenames:if os.path.splitext(filename)[1] == file_type: # os.path.splitext(filename)[1]:取后缀名,os.path.splitext(filename)[1]:取不带后缀的文件名files.append(filename)return files# 四、删除excel多余的列
def delete(file, column_save):wb = openpyxl.load_workbook(path +'/'+ file)sheet = wb.get_active_sheet()for i in range(sheet.max_column,0,-1): # 从excel最后一列倒着判断# print(i)if sheet.cell(1,i).value.strip() not in column_save:# print('删除字段: %s ...' %sheet.cell(1,i).value)sheet.delete_cols(idx=i,amount=1) # idx:参数用数字# print('\n删除成功\n')wb.save(path+'/Result/'+file.split(".")[0]+'_NEW.xlsx')# 主要函数
def main():# 1 获取路径path下的文件名# files = read_file(path, '.xlsx') # 只获取xlsx文件名files = os.listdir(path) # 获取所有文件名,包括文件夹# 2 新建存放结果的文件夹mkdir(path, 'Result')# 3 删除多余的列for file in files:try:delete(file, column_save)# wb.save(path+'/Result/'+file.split(".")[0]+'_NEW.xlsx')print(' %s 删除多余字段完成!\n' %file )except:mkdir(path, 'Faild')mktxt(path+'/Faild/', 'Error.txt', file )print('-------------------')print('\n所有操作已完成!!\n')if __name__ == '__main__':time_start=time.time()main()time_end=time.time() print('time cost:',time_end - time_start,'s') # 打印出所花费的时间
2、xlwings
特点:需要安装excel软件,大文件的读写更快,处理时间是openpyxl的1/6左右
1)代码一
运行时间:
1.xlsx 删除多余字段完成!2.xlsx 删除多余字段完成!-------------------所有操作已完成!!time cost: 15.351823091506958 s
代码:
import os
import xlwings as xw
import timepath = r'C:\个人文件夹\Data analysis learning\skit-learn\Workspace\document_vscode\test2\New folder' # 放需要删除多余列的excel的文件夹
column_save = ['1_name','3_name','5_name','7_name','科目编码'] # 需要保留的字段# 一、创建目录(文件夹)
def mkdir(root, folder):# 去除两端空白字符--如果strip()的参数为空,那么会默认删除字符串头和尾的空白字符(包括\n,\r,\t)root = root.strip() # 判断路径是否存在,存在:True、不存在:FalseisExists = os.path.exists(root+'/'+folder) # 判断结果if not isExists: # 如果不存在则创建目录# 创建目录操作函数os.makedirs(root+'/'+folder)print(folder + ' 创建成功\n')# 注释掉# else: # 如果目录存在则不创建,并提示目录已存在 # print(folder + ' 目录已存在')# 二、创建添加txt文件
def mktxt(root, txt_name, file):txt_path = root+'/'+txt_namewith open( txt_path, 'a' ) as f: # 以追加的方式打开文件,a:文件存在则追加内容,不存在则新建文件f.writelines('%s 内容修改失败\n' %file)# 三、获取指定类型的文件名称
def read_file(path, file_type): #path 是指需要提取的文件夹所在路径;file_type是指文件的拓展名;txt格式的文件则输入‘.txt’ filenames = os.listdir(path) files = []for filename in filenames:if os.path.splitext(filename)[1] == file_type: # os.path.splitext(filename)[1]:取后缀名,os.path.splitext(filename)[1]:取不带后缀的文件名files.append(filename)return files# 四、删除excel多余的列
def delete(file, column_save):app = xw.App(visible=True, add_book=False)# app.display_alerts=False # 警告关闭app.screen_updating=False # 关闭屏幕更新wb = app.books.open(path +'/'+ file)sheet = wb.sheets.activemax_column = sheet['XFD1'].end('left').columnfor i in range(max_column,0,-1): # 从excel最后一列倒着判断# print(i)if sheet.cells(1,i).value.strip() not in column_save:# print('删除字段: %s ...' %sheet.cells(1,i).value)sheet.cells(1, i).api.EntireColumn.Delete() # 删除整列# print('\n删除成功\n')wb.save(path+'/Result/'+file.split(".")[0]+'_NEW.xlsx')wb.close()app.quit()# 主要函数
def main():# 1 获取路径path下的文件名# files = read_file(path, '.xlsx') # 只获取xlsx文件名files = os.listdir(path) # 获取所有文件名,包括文件夹# 2 新建存放结果的文件夹mkdir(path, 'Result')# 3 删除多余的列for file in files:try:delete(file, column_save)# wb.save(path+'/Result/'+file.split(".")[0]+'_NEW.xlsx')print(' %s 删除多余字段完成!\n' %file )except:mkdir(path, 'Faild')mktxt(path+'/Faild/', 'Error.txt', file )print('-------------------')print('\n所有操作已完成!!\n')if __name__ == '__main__':time_start=time.time()main()time_end=time.time() print('time cost:',time_end - time_start,'s') # 打印出所花费的时间
2)代码二
改进:对比上面的改动了以下部分
- 用一个app(excel程序)打开所有wb(工作簿),所有操作完成后关闭app(这样提高了运行效率)
- 保存的文件名不都用.xlsx格式,而用原来文件的格式,如.txt,操作后也是.txt(注意:txt格式也可以打开,如果字段以tab分割则可以正常操作,否则生成的txt文件有误)
app.screen_updating=True # 最后打开屏幕更新,以免影响到下次excel的操作
运行时间:
1.xlsx 删除多余字段完成!2.xlsx 删除多余字段完成!-------------------所有操作已完成!!time cost: 3.2164769172668457 s
代码:
import os
import xlwings as xw
import timepath = r'C:\个人文件夹\Data analysis learning\skit-learn\Workspace\document_vscode\test2\New folder' # 放需要删除多余列的excel的文件夹
column_save = ['1_name','3_name','5_name','7_name','科目编码'] # 需要保留的字段# 一、创建目录(文件夹)
def mkdir(root, folder):# 去除两端空白字符--如果strip()的参数为空,那么会默认删除字符串头和尾的空白字符(包括\n,\r,\t)root = root.strip() # 判断路径是否存在,存在:True、不存在:FalseisExists = os.path.exists(root+'/'+folder) # 判断结果if not isExists: # 如果不存在则创建目录# 创建目录操作函数os.makedirs(root+'/'+folder)print(folder + ' 创建成功\n')# 注释掉# else: # 如果目录存在则不创建,并提示目录已存在 # print(folder + ' 目录已存在')# 二、创建添加txt文件
def mktxt(root, txt_name, file):txt_path = root+'/'+txt_namewith open( txt_path, 'a' ) as f: # 以追加的方式打开文件,a:文件存在则追加内容,不存在则新建文件f.writelines('%s 内容修改失败\n' %file)# 三、获取指定类型的文件名称
def read_file(path, file_type): #path 是指需要提取的文件夹所在路径;file_type是指文件的拓展名;txt格式的文件则输入‘.txt’ filenames = os.listdir(path) files = []for filename in filenames:if os.path.splitext(filename)[1] == file_type: # os.path.splitext(filename)[1]:取后缀名,os.path.splitext(filename)[1]:取不带后缀的文件名files.append(filename)return files# 主函数
def main():# 1 获取路径path下的文件名# files = read_file(path, '.xlsx') # 只获取xlsx文件名files = os.listdir(path) # 获取所有文件名,包括文件夹# 2 新建存放结果的文件夹mkdir(path, 'Result')# 3 删除多余的列app = xw.App(visible=True, add_book=False) # 打开可见excel,不新建# app.display_alerts=False # 警告关闭app.screen_updating=False # 关闭屏幕更新for file in files:try:wb = app.books.open(path +'/'+ file)sheet = wb.sheets.active"""sheet['A1048576'].end('up').row # 数据最大行数,结果:1 sheet['XFD1'].end('left').column # 数据最大列数,结果:10sheet.used_range.shape # 结果:(1, 10)sheet.api.UsedRange.Rows.count # 数据最大行数,结果:1 sheet.api.UsedRange.Columns.count # 数据最大列数,结果:10sheet.api.UsedRange.value[0] # 第一行的内容,结果:('1_name', '2_name', '3_name', '4_name', '5_name', '6_name', '7_name', '8_name', '9_name', '10_name')"""max_column = sheet.api.UsedRange.Columns.countfor i in range(max_column,0,-1): # 从excel最后一列倒着判断# print(i)if sheet.cells(1,i).value.strip() not in column_save:# print('删除字段: %s ...' %sheet.cells(1,i).value)sheet.cells(1, i).api.EntireColumn.Delete() # 删除整列# print('\n删除成功\n')wb.save(path+'/Result/'+'NEW_'+file) # 另存为‘NEW_’+文件名的形式wb.close()print(' %s 删除多余字段完成!\n' %file )except:mkdir(path, 'Faild')mktxt(path+'/Faild/', 'Error.txt', file )# app.display_alerts=True # 最后需要将警告打开,以免影响到下次excel的操作app.screen_updating=True # 最后需要打开屏幕更新,以免影响到下次excel的操作app.quit()print('-------------------')print('\n所有操作已完成!!\n')if __name__ == '__main__':time_start=time.time()main()time_end=time.time() print('time cost:',time_end - time_start,'s') # 打印出所花费的时间
实例3:python 删除excel中的多余列相关推荐
- Python删除Excel中的指定工作簿Sheet
Python删除Excel中的指定工作簿Sheet 简单粗暴上代码 默认文件路径为同一个文件夹 # 导入所需库 import openpyxl 若没有此库 直接 Terminal 安装 pip ins ...
- java excel 列_Java 删除Excel中的行和列
Excel是日常工作中常用的办公软件之一.在制作表格的时候,有时需要在工作表中插入一个或多个行和列,同时也会遇到需要将工作表中多余的行或列删除的情况.本文就将通过使用Java程序来演示如何删除Exce ...
- Python修改Excel中某一列的值
修改Excel中某一列的值 一.背景 在日常处理数据时,常常会遇到excel中数据进行批量修改,而这些数据往往是没规律的,但是站在python的角度,他们又是有规律的.我在尝试开发抽奖系统的时候,想要 ...
- 用python对excel中的两列数据进行排列组合
需求:对一个excel中的两列数据进行排列组合,并将数据追加写入到表格中. 背景:完全不懂代码的小白,所以,最后将代码打包生成可执行文件,方便操作. 下面直接上代码. import pandas as ...
- python文件中单词的删除_使用python删除文件中的多余单词
嗨,我正在学习Python,出于好奇,我编写了一个程序来删除文件中多余的单词. 我正在比较文件text1.txt中的测试.和'text2.txt',基于text1中的测试,我删除了test2中多余的单 ...
- python 删除excel空白行和空白列
import pandas as pd df=pd.read_excel(r'C:\Users\Administrator\Desktop\02测试.xls',"1") df.dr ...
- 删除excel中某一列的重复项
在给图片打标签的过程中,需要提取数据集excel表中的标签. 有大量重复项,用python程序解决了这个小问题. 一.提取下表中I列中的所有菜肴标签 二.代码 二.代码 import xlrd def ...
- 如何使用Python在Excel中插入和删除行和列?你只需要这个工具
在处理电子表格时,可能经常需要在工作表中插入或删除行和列.因此,本文将介绍如何以编程方式处理工作表中的行和列.特别是,将学习如何使用Python在Excel工作表中插入或删除单行或多行和多列. 使用P ...
- 【Python数据分析】利用Python删除EXCEL表格中指定的列数据或行数据
如何利用Python删除EXCEL表格中指定的列数据?今天与大家一起分享一下DataFrame对象的drop()函数,drop()函数可根据标签删除EXCEL表格中的列数据或行数据,其语法格式如下: ...
最新文章
- 产品经理职业发展前景的剖析
- StarkWare发布零知识证明工具链
- 计算机的关机键,怎么让电脑按关机键后不关机?让电脑主机上关机键失效的方法...
- 关于C语言goto的使用
- 剑指offer(C++)-JZ36:二叉搜索树与双向链表(数据结构-树)
- C++中-运算符与.运算符的具体使用
- vs2015-devexpress 安装
- 10000个虎年限定版红包封面!给!
- MVX-Net: Multimodal VoxelNet for 3D Object Detection
- python展望_对于Python学习的展望
- 05-D. 音像制品(类与对象)
- hlsl函数 ddx ddy
- Java存储金额解决方案BigDecimal
- 程序员如何有效率的使用键盘
- 2021年烟花爆竹生产单位安全生产管理人员免费试题及烟花爆竹生产单位安全生产管理人员考试总结
- 代码优化小技巧-使用enum统一返回code码
- php手冊,php手冊之變量范圍
- rabiitmq卸载_RabbitMQ 的安装与卸载 以及各种踩坑
- 论BTC恐惧贪婪指数在基于有限价值平均策略的量化定投中的应用
- matlab二维色温图,怎样在二维摄影画面中营造纵深立体感?试试这9个用光构图技巧吧...