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