1. 程式人生 > 其它 >超市商品過期檢索程式(一)——資料的由來

超市商品過期檢索程式(一)——資料的由來

技術標籤:筆記練習pythonpython

最近經常去超市,看到超市總有過期的商品清理出來,鄉下的超市自動化的程度並不高,商品是否過期檢查的程度並不到位,突然想要做一個超市過期商品檢索程式,這就是此程式的由來。
做這個程式的時候,首先遇到的難題就是資料的來源,畢竟很多商品儲存資料都不外流,再加上做程式就是為了練手,並不需要很準確的資料,找了許久找到了一個擁有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。