超市过期商品检索程序(一)——数据的由来

17 篇文章 2 订阅
16 篇文章 2 订阅

最近经常去超市,看到超市总有过期的商品清理出来,乡下的超市自动化的程度并不高,商品是否过期检查的程度并不到位,突然想要做一个超市过期商品检索程序,这就是此程序的由来。
做这个程序的时候,首先遇到的难题就是数据的来源,毕竟很多商品存储数据都不外流,再加上做程序就是为了练手,并不需要很准确的数据,找了许久找到了一个拥有150万商品条码库的excel列表,列表中只有条码,商品名称,容量,单位以及生产地几个信息。商品条码库信息
总的来说,最起码我的商品基础信息不需要自己随机生成了,接下来就是此程序需要的基础信息了,因为涉及到检测商品是否过期,对商品的检测,后续需要填充的日期就是生产日期和保质期了。
要是填充商品的生产日期和保质期,就需要能够读取和写入excel,这些就涉及到个别库的应用,此类程序网上可以搜到很多,本质上是对于xlwt和xlrt的应用,读取和写入excel的例程如下:
读取部分:

import xlrd

file = 'test.xls'

def read_excel():
    wb = xlrd.open_workbook(filename=file)#打开文件
    print(wb.sheet_names())#获取所有表格名字

    sheet1 = wb.sheet_by_index(0)#通过索引获取表格
    print(sheet1)
    sheet1 = wb.sheet_by_name('学生')#通过名字获取表格

    print(sheet1)
    print(sheet1.name,sheet1.nrows,sheet1.ncols)

    rows = sheet1.row_values(2)#获取行内容
    cols = sheet1.col_values(3)#获取列内容

    print(rows)
    print(cols)

    print(sheet1.cell(1,0).value)#获取表格里的内容,三种方式
    print(sheet1.cell_value(1,0))
    print(sheet1.row(1)[0].value)

if __name__ == '__main__':#设置为直接调用时运行该部分
    read_excel()

写入部分:

#xlx操作笔记1
import xlwt

def set_style(name, height, bold = False):
    style = xlwt.XFStyle()
    font = xlwt.Font()
    font.name = name
    font.bold = bold
    font.color_index = 4
    font.height = height
    style.font = font
    return style

def write_excel():
    f = xlwt.Workbook()
    sheet1 = f.add_sheet('学生',cell_overwrite_ok = True)
    row0 = ["姓名", "年龄", "出生日期", "爱好"]
    colum0 = ["张三", "李四", "练习python", "小明","小红", "无名"]
    for i in range(0,len(row0)):

        sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True))

    #写第一列

    for i in range(0,len(colum0)):

        sheet1.write(i+1,0,colum0[i],set_style('Times New Roman',220,True))



    sheet1.write(1,3,'2006/12/12')

    sheet1.write_merge(6,6,1,3,'未知')#合并行单元格

    sheet1.write_merge(1,2,3,3,'打游戏')#合并列单元格

    sheet1.write_merge(4,5,3,3,'打篮球')



    f.save('test.xls')



if __name__ == '__main__':#设置为直接调用时运行该部分

    write_excel()

本以为这两部分就够用了,结果发现写入程序的使用条件仅限于新建文件的时候,于是就只能继续借用强大的网络,进行再次查找,找到了一个xlutils库:

import xlrd
from xlutils.copy import copy

f = 'F:/python_text/商品日期报告项目/超市商品条码库.xlsx'

rb = xlrd.open_workbook(f)
wb = copy(rb)
ws = wb.get_sheet(1)
ws.write(0,0,'change')
ws.write(8,5,'63')
wb.save(f)

读取和改写的部分解决了,接下来是生产日期的问题,生产日期属于日期的随机生成部分,本来是想建立三个字符组,分别随机调用年月日,后来随便一查,发现time库有日期的生成功能——time.mktime很合适,具体例程如下:

def rand_date():#随机生产日期
    start_time = (2020,1,1,0,0,0,0,0,0)#日期起始时间:2020-01-01 00:00:00
    end_time = (2021,1,20,23,59,59,0,0,0)#日期结束时间;2021-01-20 23:59:59
    start = time.mktime(start_time)
    end = time.mktime(end_time)
    t = randint(start,end)
    date_touple = time.localtime(t)
    date = time.strftime("%Y-%m-%d", date_touple)
    return date

至于保质期,采用随机选择的方法,从字符组中随机调用,后期又加了商品的库存,分了商场和仓库两个部分,最后得到的程序如下:

#生产日期模拟
from random import randint
from xlutils.copy import copy
import xlrd
import time

f = 'F:/python_text/商品日期报告项目/超市商品条码库.xlsx'
sday_name = ['15天', '一个月', '45天', '两个月', '三个月', '四个月', '半年', '一年', '三年']

def rand_date():#随机生产日期
    start_time = (2020,1,1,0,0,0,0,0,0)#日期起始时间:2020-01-01 00:00:00
    end_time = (2021,1,20,23,59,59,0,0,0)#日期结束时间;2021-01-20 23:59:59
    start = time.mktime(start_time)
    end = time.mktime(end_time)
    t = randint(start,end)
    date_touple = time.localtime(t)
    date = time.strftime("%Y-%m-%d", date_touple)
    return date

def rand_sdate():#随机生成保质期
    return randint(0,8)

def rand_stock():#随机生成库存
    return randint(1,100)

def write_date():
    rb = xlrd.open_workbook(f)
    wb = copy(rb)
    ws = wb.get_sheet(0)
    for i in range(1,12134):
        ws.write(i,6,rand_date())
        ws.write(i, 7, sday_name[rand_sdate()])
        ws.write(i, 11, rand_stock())#商场存量
        ws.write(i, 12, rand_stock())#库房存量
    wb.save(f)

write_date()

第一部分到此结束,后期会贴上150万商品条码库的excel。
210616补充条码库链接:
链接:https://pan.baidu.com/s/1-4LWz2txfz9CNKRfjCWhgw
提取码:yucz

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值