吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7208|回复: 20
收起左侧

[其他] 【python】EXCEL的xls文件内容批量替换文字

  [复制链接]
piazini 发表于 2022-1-14 15:15
本帖最后由 piazini 于 2022-1-17 09:02 编辑

测试修改前,先打包备份!
测试修改前,先打包备份!
测试修改前,先打包备份!
重要的事情说三遍

新手,网上东拼西凑了个脚本。

功能:批量搜索py脚本所在目录及子目录下的excel的xls文件,替换修改表格里内容。


[Python] 纯文本查看 复制代码
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Date: 2022/01/08
# testing System version: CentOS Linux release 7.8.2003 (Core)
# Python version : 2.7.5 (default, Apr  2 2020, 13:16:51)
# xlrd module version : 2.0.1
# xlwt module version : 1.3.0
# xlutils module version :2.0.0
# 注意:1.只支持xls(excel 97/2003)文件,不支持xlsx(excel 2007/2010+)
#       2.脚本中注释在实际使用时删掉,否则可能会在某些环境下有奇怪问题
 
import os,sys
import xlrd,xlwt
from xlutils.copy import copy
 
## 旧的字符串
old_str = ['pkgname','username','dbinfo','dbname']
## 替换的新字符串,新旧列表中位置要对应
new_str = ['PKGNAME','USERNAME','DBINFO','DBNAME']
 
## 新旧字符串列表长度
len_old_str = len(old_str)
len_new_str = len(new_str)
## 检查新旧字符串列表数量是否相等,不相等退出
if len_old_str != len_new_str:
    print "\n[ Error ] 'old_str =",len_old_str,"' not eq 'new_str =",len_new_str,"'\n"
    sys.exit();
 
## 小写转大写
def str_to_STR( xls_list ):
    ## 读取Excle文件
    wb = xlrd.open_workbook( xls_list )
    ## 将uncode编码汉字显示成可读
    reload(sys)
    sys.setdefaultencoding( "utf-8" )
    ## 读取第1个索引的sheet页,索引0开始
    sheet = wb.sheet_by_index(1)
    ## 读取excle里第一个sheet页,第10列(J列)内容,索引0开始
    col = sheet.col_values(9)
    print "\n[ OK ] 共读取 %s 行。" %len(col)
    new_col = []
    new_col_tmp = []
    ## 循环替换小写到大写;for循环两个参数时用zip包含
    for f_old_str,f_new_str in zip(old_str,new_str):
    print "[ Info ] 正在查找 '%s' 并替换成 '%s'" %(f_old_str,f_new_str)
        if not new_col_tmp :
            ## 首次循环列表空,复制列表
            new_col_tmp = col
        for col_list in new_col_tmp:
            new_col.append(col_list.replace(f_old_str,f_new_str))
        ## 交换列表值,防止多次循环重复添加
        ## 清空列表
        new_col_tmp = []
        ## 复制列表
        new_col_tmp = new_col
        ## 清空列表
        new_col = []
    print "[ OK ] 共修改 %s 行。" %len(new_col_tmp)
     
    ## save date to EXCLE
    row = 0 #行
    column = 9 # 列
    ## 新建文件
    #workbook1 = xlwt.Workbook()
    ## 打开文件追加(覆盖)原内容,formatting_info=True保留文件原来格式
    #workbook1 = xlrd.open_workbook(r'/media/win-share-c/test.xls')
    workbook1 = xlrd.open_workbook( xls_list, formatting_info=True)
    #print workbook
    ## 新文件中添加,名字为"Style"的sheet页,内容cell_overwrite_ok覆盖
    #sheet_wt = workbook.add_sheet('Style',cell_overwrite_ok=True)
    ## 将xlrd的对象转化为xlwt的对象
    workbook = copy(workbook1)
    ## 获取要操作的第0个sheet页
    sheet_wt = workbook.get_sheet(1)
    ## 循环追加写入内容
    for i in range(len(new_col_tmp)):
        sheet_wt.write(row,column,new_col_tmp[i])
    ## 到下一行
        row = row + 1
    ## 捕获保存文件异常
    try:
        workbook.save( xls_list )
    except IOError:
        print "\n[ Error ] 写入错误,请关闭文件!\n"
    else:
    def_xls_file_name = os.path.basename(xls_list)
        print "\n[ OK ] 文件: %(def_xls_file_name)s 第%(column)s列,小写转大写完成,保存到文件完成!\n" % locals();
     
    return
 
## function Main
def main():
    ## 查找.xls后缀文件
    xls_file_lists = []
    ## 循环查找py文件同目录及子目录下的xls文件
    for filepath,dirnames,filenames in os.walk(os.getcwd()):
            for filename in filenames:
                    ## 文件后缀为.xls,则添加到列表中
                    if os.path.splitext(filename)[1] == '.xls':
                ## sep自动识别系统路径分割,用'/'或'\'
                            #xls_file_lists.append(os.path.join(filepath,filename))
                            xls_file_lists.append(os.sep.join([filepath,filename]))
     
    len_xls_file_lists = len(xls_file_lists)
    print "\n共找到 %s 个xls后缀文件:" %len_xls_file_lists
    ## 列出找到的xls后缀文件
    for list in xls_file_lists:
            print list
     
    ## 开始读取数据并替换
    for xls_list in xls_file_lists:
        print "\n开始读取: %s" %xls_list
        str_to_STR( xls_list )
 
 
if ( __name__ == '__main__' ) or ( __name__ == 'main' ):
    main();



效果图:

执行提示

执行提示


替换前:

替换前

替换前


替换后:

替换后

替换后



__EOF__

免费评分

参与人数 5吾爱币 +4 热心值 +4 收起 理由
蝸牛 + 1 + 1 我很赞同!
wq6225 + 1 Ctrl + F 这个功能可以放弃了?
z7138910 + 1 + 1 热心回复!
hshcompass + 1 热心回复!
抱薪风雪雾 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| piazini 发表于 2022-1-17 08:54
中原一点红 发表于 2022-1-16 00:55
没看懂,是搜索表格内内容然后替换还是啥,后续研究看看
感谢分享...

对,表格里的内容
 楼主| piazini 发表于 2022-1-17 08:52
wanshiz 发表于 2022-1-16 06:55
好像是不用打开电子表格就替换,有些方便。感谢分享。

是的,不用手动打开,自己读取的
平淡最真 发表于 2022-1-14 15:23
 楼主| piazini 发表于 2022-1-14 15:38

恩,我因为工作环境限制,只能用2这个版本
sp0770 发表于 2022-1-14 16:43
软件本身不是也自带这功能吗?
风夜 发表于 2022-1-14 17:10
感谢分享,下来试试。
 楼主| piazini 发表于 2022-1-14 17:19
sp0770 发表于 2022-1-14 16:43
软件本身不是也自带这功能吗?

如果你有100个表格文件呢?! 关键字“批量”
头像被屏蔽
wuti90 发表于 2022-1-15 08:59
提示: 作者被禁止或删除 内容自动屏蔽
抱薪风雪雾 发表于 2022-1-15 10:46
这个该如何使用呢,是要安装python 吗
捷径临 发表于 2022-1-15 12:47
感谢楼主分享
z7138910 发表于 2022-1-15 22:24
学习一下。关键是批量
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 提醒:禁止复制他人回复等『恶意灌水』行为,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-8 02:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表