易语言 取excel表格名称_给新手的python“Excel自动处理工具”教程

学 Python 都用来干嘛的? - 海燕的回答 - 知乎

在上面的回答中,我做了两个小工具“Excel自动处理工具”和“商品抓取工具”,有小伙伴想看看教程,所以就有了这篇文章。

一、“excel处理器”是怎样的?

(一)理清工作流程

我的做电商运营的朋友,需要处理许多Excel文件,里面包含电商网站“商品搜索热度”和“全网商品数量”等数据,要从里面找出一些优质的“搜索关键词”,据此上架商品。

e4310721-b912-eb11-8da9-e4434bdf6706.png

e6310721-b912-eb11-8da9-e4434bdf6706.png

每天拿到表格,打开,插入三列空白表格,输入进行计算【竞争激烈度 = 搜索指数 / 全网商品数】【指标A = 某列数据 / 某列数据】【指标B = 某列数据 / 某列数据】

e8310721-b912-eb11-8da9-e4434bdf6706.png

按指标B从大到小排序,删除表格中带有“品牌字样”的关键词

e9310721-b912-eb11-8da9-e4434bdf6706.png

复制优质关键词,到空白表格中。

ed310721-b912-eb11-8da9-e4434bdf6706.png

重复以上步骤25次,大概要用1.5个小时.....

(二)自动化思路

根据上面的流程我做了个工具。

ef310721-b912-eb11-8da9-e4434bdf6706.png

输入屏蔽词(各种品牌的名字),点击【选择文件】和【处理文件】,然后pandas自动计算【市场竞争】【指标A 】【指标B】、删除含有屏蔽词的对象、排序,自动处理25个表格之后,把所有表格复制到空表格,并排序,全部输出到一个文件。

f0310721-b912-eb11-8da9-e4434bdf6706.png

f2310721-b912-eb11-8da9-e4434bdf6706.png

嘿嘿,1.5小时的工作,用时不到3秒完成。


二、教程

现在让我们一步一步代码写出来

(一)传统艺能:引用库

import 

(二)创建图形界面,构建程序框架

我们希望写一个什么样的工具呢?有图形界面,能选择文件,能处理文件

#定义一个类
class demo(object): 
    def __init__(self):
        window = tk.Tk() # 创建一个软件窗口
        window.geometry('240x160') # 设置窗口大小
        window.title('Excel文件处理') # 设置窗口名称
        tk.mainloop() # 开启窗口循环

    def cho_files(self): # 创建功能:选择文件
        pass # 先写个名字,之后再写具体功能

    def deal_files(self): # 创建功能:处理多个文件
        pass # 同上

    def deal_file(self, file): # 创建功能:处理单个文件
        pass # 同上

if __name__ == __name__:
    demo()

运行一下试试看,yes,框架出来了,不过光秃秃的,没有按钮

f3310721-b912-eb11-8da9-e4434bdf6706.png

(三)加上按钮

def __init__(self):
    window = tk.Tk()
    window.geometry('240x160')
    window.title('Excel文件处理')
  
    # 创建一个按钮,按钮放在window窗口上
    # 按钮上的字是“选择文件”,按下后触发功能“cho_files”函数
    self.bo_cho = tk.Button(window, text='选择文件', command=self.cho_files)

    self.bo_deal = tk.Button(window, text='处理文件', command=self.deal_files)

    # 创建一个标签
    lable1 = tk.Label(window, text='可在下方输入需要排除的关键词,空格隔开')

    # 创建一个多行文本框,放在window窗口上
    self.Text_word = tk.Text(window)

    # 往多行文本框插入文字“京东 自营 旗舰店 以上”
    self.Text_word.insert('insert', '京东 自营 旗舰店 以上')

    # 放置按钮等部件(之前只是创建,没有放置)
    # pack是一种布局方式,叫“相对布局”。
    # 还有其他布局方式:place(绝对布局,就是像输入坐标一样布局)
    # grid(网格布局,把界面分为行行列列来布局)
    self.bo_cho.pack()
    self.bo_deal.pack()
    lable1.pack()
    self.Text_word.pack()

    self.file = None # 定义一个变量,来接收单个文件,例:'D:/product/文件1.xls'
    self.files = None # 来接收多个文件,例:('D:/product/文件1.xls', 'D:/product/文件2.xls')
    self.file_name = None # 用来接收文件名称,例:‘文件1.xls’
    self.files_path = None # 用来接收文件的路径,例:‘D:/product/’

    # dataFrame 为一种数据格式,有行和列
    # 新建一个表格,表头为“竞争激烈度”等,有两行为“0”的数据
    self.content = pd.DataFrame(
            {'竞争激烈度': ['0', '0'], '关键词': ['0', '0'], '搜索指数': ['0', '0'], '全网商品数': ['0', '0']})

    tk.mainloop()

运行一下

f4310721-b912-eb11-8da9-e4434bdf6706.png

好,现在已经有了按钮,我们可以开始写“选择文件”和“处理文件”的功能了!

(四)功能:选择文件

def cho_files(self): # 定义一个选择文件的函数

    # filedialog.askopenfilenames能打开“选择文件的窗口”
    # 如果用户选择了“文件1”和“文件2”,那么会返回('D:/product/文件1.xls', 'D:/product/文件2.xls')
    # 如果用户没有选择文件(点击了取消),那么会返回空字符串''
    self.files = filedialog.askopenfilenames()

    # 如果self.files为真,则执行下列代码(空字符串''会被判断为假)
    if self.files:

    # 取self.files中的第一个,即'D:/product/文件1.xls'
    afile = self.files[0]

    # 把'D:/product/文件1.xls'用 '/' 切分,并选中最后一个元素,即‘文件1.xls’
    filename = afile.split('/')[-1]

    # 把 'D:/product/文件1.xls' 中的 ‘文件1.xls’替换成空字符串(效果相当于删掉)
    # 得到 'D:/product/'
    self.files_path = afile.replace(filename, '')

(五)功能:处理单个文件

def deal_per_file(self, file):

    # 提取到文件名‘文件1’
    name = file.split('/')[-1].split('.')[0]

    # 根据文件路径,读取文件
    df = pd.read_excel(file)

    #下面只是处理我的文件的方式,大家不一定适用

    #把表格中的 ‘-’ 替换成 0
    df = df.replace('-', 0)

    # 把“搜索指数”这一列数据,转换成浮点数类型
    df['搜索指数'] = df['搜索指数'].astype(float)
    df['全网商品数'] = df['全网商品数'].astype(float)
        
    # 把 '全网商品数'列 除以 '搜索指数'列,并四舍五入到小数点后两位
    # 如果没有'竞争激烈度'这一列,就新建
    df['竞争激烈度'] = (df['全网商品数'] / df['搜索指数']).round(decimals=2)

    # 重新变列的顺序
    df = df.reindex(columns=['竞争激烈度','关键词', '搜索指数', '全网商品数'])

    # 根据‘竞争激烈度’这一列的大小排序
    df = df.sort_values('竞争激烈度', ascending=False)

    # 对'文本输入框'调用get方法,获得输入的“京东 自营 旗舰店 以上”
    # 把‘ ’替换成‘|’,得到‘京东|自营|旗舰店|以上’
    Text_word = self.Text_word.get('1.0', 'end').replace(' ', '|')

    # 选中‘关键词’中包含Text_word的行
    Text_word = df['关键词'].str.contains(Text_word)
    # 反选
    df = df[~Text_word]

    # 拼接 self.content 和 df 这两个表格
    self.content = pd.concat((self.content, df), axis=0, join='outer')

    # 返回 表格的数据 和 表格的名称
    return df, name

(六)功能:处理多个文件

def deal_files(self):

    # self.files_path 即上文定义的 ‘D:/product/’
    # 创建一个Excel写入器,文件生成在 ‘D:/product/总表.xlsx’
    writer = pd.ExcelWriter(self.files_path + '总表.xlsx', engine='xlsxwriter')

    # 把所有文件路径,依次赋值给 self.file
    for self.file in self.files:
        # self.deal_per_file 就是我们上个写的函数
        # 把单个文件路径传入函数
        # 返回“表格数据”和“表格内容”
        df, name = self.deal_per_file(self.file)

        # 把“表格数据”写入excel文件,并指定写入哪个文件 和 sheet名称
        df.to_excel(writer, sheet_name=name)
        #循环处理所有文件

    # self.content 包含了所有文件的数据
    # 把 self.content 按'竞争激烈度'的大小排序
    self.content = self.content.sort_values('竞争激烈度', ascending=False)

    # 把“表格数据”写入excel文件,并指定写入哪个文件 和 sheet名称
    self.content.to_excel(writer, sheet_name='总表')

    # 保存这个excel文件
    writer.save()

    # 重置 self.content 
    self.content = pd.DataFrame(
            {'竞争激烈度': ['0', '0'], '关键词': ['0', '0'], '搜索指数': ['0', '0'], '全网商品数': ['0', '0']})

    # 弹出窗口,窗口标题为“成功”,窗口含有信息“成功生成文件。”
    messagebox.showinfo(title='成功', message='成功生成文件。')

f5310721-b912-eb11-8da9-e4434bdf6706.png

Yes,鼓掌!!庆贺一下,你已经弄懂“excel处理工具”的原理了。

接下来你可以试着自己把它写出来:先理清需要什么功能,再写出程序框架,最后逐个完善功能。

excel数据.zip
882.7K
·
百度网盘
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值