如何在终端查看excel内容

2023年 8月 18日 35.5k 0

背景

最近发现打开电脑的excel很慢,而且使用到的场景很少,也因为mac自带了预览的功能。但是shigen就是闲不住,想自己搞一个excel预览软件,于是在一番技术选型之后,我决定使用python在控制台显示excel的内容。
具体的需要的功能有:

  • 查看excel的某一行信息
  • 查看某个范围的信息,信息的区间为[start,end]
  • 如果以上的行、起始行、结束行这几个参数都没有传递,就分页展示
  • 于是带着这样的设计,我开始了折腾。
    技术选型: python faker pandas rich argparse
    参数列表:

    • -f 文件的绝对路径/相对路径
    • -s 起始列
    • -e 结束列
    • -r 查看的行

    生成假数据

    还记得之前的faker教程吗?这次派上用场了,我打算用faker模拟生成假数据,然后用pandas写入到excel里边。
    首先我定义了一个user类,它的属性有ID,名字、密码、昵称、电话、简介、头像地址、创建时间和更新时间。
    我们先来看一下模拟生成的一条数据的效果:

    from faker import Faker
    
    # 创建Faker对象
    fake = Faker('zh_CN')
    
    class User:
        def __init__(self):
            self.id = fake.random_int(min=1, max=1000)
            self.name = fake.name()
            self.password = fake.password()
            self.nickname = fake.user_name()
            self.phone = fake.phone_number()
            self.introduction = fake.text(max_nb_chars=200)
            self.avatar_url = fake.image_url(width=None, height=None)
            self.created_at = fake.date_time_this_decade().strftime('%Y-%m-%d %H:%M:%S')
            self.updated_at = fake.date_time_this_month().strftime('%Y-%m-%d %H:%M:%S')
    
    # 创建一个用户实例
    user = User()
    
    # 打印用户属性
    print("ID:", user.id)
    print("姓名:", user.name)
    print("密码:", user.password)
    print("昵称:", user.nickname)
    print("电话:", user.phone)
    print("自我介绍:", user.introduction)
    print("头像地址:", user.avatar_url)
    print("创建时间:", user.created_at)
    print("更新时间:", user.updated_at)
    
    
    ID: 51
    姓名: 陈健
    密码: @XGfngbT+3
    昵称: juan96
    电话: 18827668763
    自我介绍: 日本本站一个深圳.设备感觉只有以上能力特别.不同您的建设报告.
    国家都是个人什么地方这种国家参加.他们进行加入汽车个人最大方式.一点以上数据生活主要.
    两个一般其他对于那么新闻.一下准备喜欢只要作品经济.注册最新更多制作名称还有社会.
    自己没有能力组织不能一定.责任准备市场以后最新单位虽然.信息没有谢谢表示.
    控制重要标准的是之间.本站世界以上如何成为得到.
    头像地址: https://picsum.photos/541/475
    创建时间: 2022-04-10 14:00:10
    更新时间: 2023-08-11 00:05:08
    

    怎么样,数据是不是很好看。自诩一下,可以用来生成业务测试需要的基础数据。

    下边是生成120条假数据。

    # 生成120条用户数据
    users = [User() for _ in range(120)]
    

    现在,数据生成好了,就需要我们将数据导入到excel里边。
    首先需要构建dataFrame对象,直接写入到users.xlsx里边,不得不说,df.to_excel是真的很好用!

    import pandas as pd
    
    # 将用户数据转换为DataFrame
    data = {
        "ID": [user.id for user in users],
        "姓名": [user.name for user in users],
        "密码": [user.password for user in users],
        "昵称": [user.nickname for user in users],
        "电话": [user.phone for user in users],
        "自我介绍": [user.introduction for user in users],
        "头像地址": [user.avatar_url for user in users],
        "创建时间": [user.created_at for user in users],
        "更新时间": [user.updated_at for user in users]
    }
    df = pd.DataFrame(data)
    
    # 保存DataFrame为Excel文件
    filename = "users.xlsx"
    df.to_excel(filename, index=False)
    
    print(f"数据已保存到文件'{filename}'")
    
    数据已保存到文件'users.xlsx'
    

    输出了这样的内容,就代表excel写入成功了。现在就有了excel的测试数据了。

    书写代码

    现在数据已经有了,可以用来测试了。此处省略掉shigen调试的漫长过程,只展示代码的截图,需要源代码的伙伴可以私聊我哈。

    效果验证

    现在,我们的编码过程已经实现了,需要来验证一下功能了。

    获得代码的帮助

    (base) ~  $ excel -h
    usage: excel_reader.py [-h] [-f file] [-r ROW] [-s START] [-e END] [-p PAGESIZE]
    
    在控制台查看 Excel 文件的内容
    
    optional arguments:
      -h, --help            show this help message and exit
      -f file, --file_path file
                            Excel 文件路径
      -r ROW, --row ROW     第几行
      -s START, --start START
                            起始行
      -e END, --end END     结束行
      -p PAGESIZE, --pagesize PAGESIZE
                            每页显示的行数
    

    获得第10行

    excel -f ~/temp/python/推文文章/users.xlsx -r 10
    

    获得10-12行的内容

    内容有点多,仅展示两条,看看效果

    excel -f ~/temp/python/推文文章/users.xlsx -s 10 -e 12
    

    分页显示

    这也是这个功能的重头戏,直接分页显示,不需要其它的额外参数

    excel -f ~/temp/python/推文文章/users.xlsx
    

    看到了提示吗,输入命令:(n-下一页, p-上一页, q-退出),我们来试试。


    这就是下一页的实现了。q直接退出,我就不再演示了。

    后记

    这就是shigen花了两小时做出来的直接在终端读取excel内容的功能,期待能实实在在地提升日常的效率。同时代码也存在一些性能可以优化的,但是目前的知识技能有限,只能先做成这样的了。
    我也越发的相信:学技术,先广度再深度这个观点了,广度:让我有了足够高的角度来看清楚问题的本质,接着技术选型和实现;深度:让我挖掘其中的底层原理,不断的优化程序的性能。

    以上就是shigen的分享了,期待你的参与和交流。

    shigen一起,每天不一样。

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论