Python程序設(shè)計(jì)基礎(chǔ)案例教程 課件 案例6-2 農(nóng)產(chǎn)品庫存管理_第1頁
Python程序設(shè)計(jì)基礎(chǔ)案例教程 課件 案例6-2 農(nóng)產(chǎn)品庫存管理_第2頁
Python程序設(shè)計(jì)基礎(chǔ)案例教程 課件 案例6-2 農(nóng)產(chǎn)品庫存管理_第3頁
Python程序設(shè)計(jì)基礎(chǔ)案例教程 課件 案例6-2 農(nóng)產(chǎn)品庫存管理_第4頁
Python程序設(shè)計(jì)基礎(chǔ)案例教程 課件 案例6-2 農(nóng)產(chǎn)品庫存管理_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

文件與目錄操作【案例6-2】農(nóng)產(chǎn)品庫存管理02案例分析在鄉(xiāng)村振興戰(zhàn)略深入推進(jìn)、農(nóng)產(chǎn)品產(chǎn)業(yè)快速發(fā)展的時(shí)代背景下,傳統(tǒng)人工庫存管理與分級(jí)模式因效率低、成本高,難以滿足現(xiàn)代農(nóng)業(yè)發(fā)展需求。為此,本案例是一個(gè)專門針對(duì)農(nóng)產(chǎn)品倉庫的簡易庫存管理程序。所有的庫存數(shù)據(jù)都將被妥善存儲(chǔ)在Excel文件中,這不僅方便數(shù)據(jù)的長期保存,還便于后續(xù)進(jìn)行數(shù)據(jù)的查詢、統(tǒng)計(jì)和分析。無論是日常的庫存盤點(diǎn),還是定期的銷售數(shù)據(jù)總結(jié),都能通過Excel文件輕松實(shí)現(xiàn)。知識(shí)儲(chǔ)備Excel文件操作CSV文件操作知識(shí)儲(chǔ)備在Python中,處理Excel文件通常使用pandas庫,這是一個(gè)功能強(qiáng)大的數(shù)據(jù)處理庫,它提供了讀取和寫入Excel文件的功能。知識(shí)儲(chǔ)備—Excel文件操作知識(shí)儲(chǔ)備—Excel文件操作無縫銜接單元測(cè)試1.安裝pandaspipinstallpandas語法格式知識(shí)儲(chǔ)備—Excel文件操作無縫銜接單元測(cè)試pandas.read_excel(io,sheet_name=0,*,header=0,names=None,index_col=None)語法格式2.讀取Excel文件pandas的read_excel()函數(shù)用于讀取Excel文件(.xls或.xlsx),并將其內(nèi)容加載到DataFrame對(duì)象中。語法格式如下:參數(shù)說明:io:這是必需的參數(shù),指定了要讀取的Excel文件的路徑或文件對(duì)象。sheet_name=0:指定要讀取的工作表名稱或索引。默認(rèn)為0,即第一個(gè)工作表。header=0:指定用作列名的行。默認(rèn)為0,即第一行。names=None:用于指定列名的列表。如果提供,將覆蓋文件中的列名。index_col=None:指定用作行索引的列??梢允橇械拿Q或數(shù)字。知識(shí)儲(chǔ)備—Excel文件操作無縫銜接單元測(cè)試importpandasaspddf=pd.read_excel('example.xlsx',sheet_name='Sheet1')print(df)示例11使用read_excel()函數(shù)讀取Excel文件。知識(shí)儲(chǔ)備—Excel文件操作無縫銜接單元測(cè)試3.寫入Excel文件DataFrame的to_excel()方法用于將DataFrame寫入Excel文件。語法格式如下:DataFrame.to_excel(excel_writer,*,sheet_name='Sheet1',header=True,index=True,startrow=0,startcol=0)語法格式參數(shù)說明:excel_writer:這是必需的參數(shù),指定了要寫入的Excel文件路徑或文件對(duì)象。sheet_name='Sheet1':指定寫入的工作表名稱,默認(rèn)為'Sheet1'。columns=None:指定要寫入的列。如果為None,則寫入所有列。header=True:指定是否寫入列名作為第一行。如果為False,則不寫入列名。index=True:指定是否寫入索引作為第一列。如果為False,則不寫入索引。startrow和startcol:指定寫入數(shù)據(jù)的起始行和列的索引。默認(rèn)為0。知識(shí)儲(chǔ)備—Excel文件操作無縫銜接單元測(cè)試importpandasaspddata={'Name':['張三','李四'],'Age':[25,30],'Gender':['男','女']}df=pd.DataFrame(data)df.to_excel('output.xlsx',index=False)示例12使用to_excel()方法將數(shù)據(jù)寫入Excel文件中。知識(shí)儲(chǔ)備—Excel文件操作無縫銜接單元測(cè)試4.追加數(shù)據(jù)到Excel文件向現(xiàn)有的Excel文件中追加數(shù)據(jù)而不是覆蓋,可以使用ExcelWriter類。語法格式如下:pandas.ExcelWriter(path,engine=None,mode='w',date_format=None,if_sheet_exists=’error’)語法格式參數(shù)說明:path:必需參數(shù),指定了要寫入的Excel文件的路徑、URL或文件對(duì)象。mode:可選參數(shù),默認(rèn)為“w”,表示寫入模式。如果設(shè)置為“a”,則表示追加模式,向現(xiàn)有文件中添加數(shù)據(jù)(僅支持部分引擎,如openpyxl)。

date_format:可選參數(shù),指定寫入Excel文件中日期的格式字符串,例如“YYYY-MM-DD”。if_sheet_exists:可選參數(shù),當(dāng)工作表已存在時(shí)的處理方式(需配合mode='a'),默認(rèn)值為“error”(報(bào)錯(cuò)),可選值有:“new”(創(chuàng)建新表)、“replace”(刪除并重建工作表)、“overlay”(追加數(shù)據(jù))。知識(shí)儲(chǔ)備—Excel文件操作無縫銜接單元測(cè)試importpandasaspddf=pd.read_excel('output.xlsx')new_data={'Name':['王五'],'Age':[35]}new_df=pd.DataFrame(new_data)withpd.ExcelWriter('output.xlsx',engine='openpyxl',mode='a',if_sheet_exists='overlay')aswriter:new_df.to_excel(writer,sheet_name='Sheet1',index=False,header=False,startrow=len(df)+1)示例13使用ExcelWriter類來追加數(shù)據(jù)到已存在的Excel文件。例如,一個(gè)典型的CSV文件內(nèi)容如下:知識(shí)儲(chǔ)備—CSV文件操作CSV(Comma-SeparatedValues,逗號(hào)分隔值)文件是一種簡單的文本文件格式,用于存儲(chǔ)表格數(shù)據(jù),其中每一行代表一條記錄,行中的每個(gè)字段通過逗號(hào)分隔。CSV文件通常用于數(shù)據(jù)交換和存儲(chǔ)。它的優(yōu)點(diǎn)是簡單、輕量、易于讀取和寫入,缺點(diǎn)是無法存儲(chǔ)復(fù)雜的格式和公式。Name,Age,Gender張三,25,男李四,30,女王五,35,男知識(shí)儲(chǔ)備—CSV文件操作無縫銜接單元測(cè)試Python提供了內(nèi)置的csv模塊,用于讀取和寫入CSV文件。它提供了簡單的接口,可以直接與文件進(jìn)行交互。1.讀取CSV文件csv.reader()函數(shù)用于讀取CSV文件的數(shù)據(jù)。語法格式如下:csv.reader(file)語法格式參數(shù)file的值為文件對(duì)象。知識(shí)儲(chǔ)備—CSV文件操作無縫銜接單元測(cè)試示例14使用reader()函數(shù)讀取CSV文件的數(shù)據(jù),示例代碼如下:importcsvwithopen('data.csv',mode='r',encoding='utf-8')asfile:csv_reader=csv.reader(file)forrowincsv_reader:print(row)運(yùn)行結(jié)果如下:['Name','Age','Gender']['張三','25','男']['李四','30','女']['王五','35','男']知識(shí)儲(chǔ)備—CSV文件操作無縫銜接單元測(cè)試2.寫入CSV文件csv.writer()函數(shù)用于將數(shù)據(jù)寫入CSV文件。語法格式如下:csv.writer(file)語法格式參數(shù)file的值為文件對(duì)象。知識(shí)儲(chǔ)備—CSV文件操作示例15使用writer()函數(shù)將數(shù)據(jù)寫入CSV文件中,示例代碼如下:importcsvdata=[['Name','Age','City'],['張三','30','北京'],['李四','25','上海']]withopen('output.csv',mode='w',encoding='utf-8',newline='')asfile:csv_writer=csv.writer(file)forrowindata:csv_writer.writerow(row)知識(shí)儲(chǔ)備—CSV文件操作無縫銜接單元測(cè)試3使用字典讀取和寫入CSV文件csv模塊還提供了DictReader類和DictWriter類,它們可以將CSV文件的每一行解析為字典,或者將字典寫入CSV文件。無縫銜接單元測(cè)試示例16使用DictReader類讀取CSV文件,使用DictWriter類寫入CSV文件。importcsvdata=[{'Name':'張三','Age':'30','City':'北京'},{'Name':'李四','Age':'25','City':'上海'}]withopen('output.csv',mode='w',encoding='utf-8',newline='')asfile:fieldnames=['Name','Age','City']csv_dict_writer=csv.DictWriter(file,fieldnames=fieldnames)csv_dict_writer.writeheader() #寫入表頭forrowindata: #循環(huán)寫入數(shù)據(jù)csv_dict_writer.writerow(row)withopen('output.csv',mode='r',encoding='utf-8')asfile:csv_dict_reader=csv.DictReader(file)forrowincsv_dict_reader:print(row)案例實(shí)現(xiàn)創(chuàng)建名稱為“農(nóng)產(chǎn)品庫存管理”的項(xiàng)目,在項(xiàng)目下創(chuàng)建名稱為inventory_system的Python文件。準(zhǔn)備工作案例實(shí)現(xiàn)STEP01導(dǎo)入必要的庫導(dǎo)入項(xiàng)目所需的外部庫,為后續(xù)的文件操作、數(shù)據(jù)處理和日期處理提供支持。importpandasaspdimportosfromdatetimeimportdatetime案例實(shí)現(xiàn)STEP02配置文件信息定義存儲(chǔ)庫存數(shù)據(jù)的Excel文件名稱和工作表名稱,方便后續(xù)操作。DATA_FILE="農(nóng)產(chǎn)品庫存數(shù)據(jù).xlsx"SHEET_NAME="庫存信息"案例實(shí)現(xiàn)STEP03初始化Excel文件和工作表創(chuàng)建一個(gè)新的Excel文件和工作表,并初始化表頭。實(shí)現(xiàn)思路:使用pandas的DataFrame類創(chuàng)建一個(gè)空的數(shù)據(jù)框,指定列名。使用to_excel()方法將數(shù)據(jù)框保存到指定的Excel文件和工作表中,設(shè)置index=False以避免保存索引列。打印創(chuàng)建成功的提示信息。definitialize_file():#創(chuàng)建新DataFramedf=pd.DataFrame(columns=["編號(hào)","名稱","庫存數(shù)量","進(jìn)貨價(jià)格","上次進(jìn)貨日期","上次銷售日期","最低庫存預(yù)警值","是否需要補(bǔ)貨"])df.to_excel(DATA_FILE,sheet_name=SHEET_NAME,index=False)#保存到Excelprint(f"已創(chuàng)建庫存文件:{DATA_FILE}")案例實(shí)現(xiàn)STEP04添加新產(chǎn)品到庫存向庫存中添加新產(chǎn)品,并更新Excel文件。defadd_product(name,quantity,price,warning_threshold=10):df=pd.read_excel(DATA_FILE,sheet_name=SHEET_NAME)#讀取現(xiàn)有數(shù)據(jù)new_id=len(df)+1#生成新編號(hào)#添加新產(chǎn)品new_row={"編號(hào)":new_id,"名稱":name,

…………省略部分代碼}new_df=pd.DataFrame(new_row,index=[new_id])withpd.ExcelWriter(DATA_FILE,engine='openpyxl',mode='a',if_sheet_exists='overlay')aswriter:new_df.to_excel(writer,sheet_name=SHEET_NAME,index=False,header=False,startrow=len(df)+1)print(f"已添加產(chǎn)品:{name},庫存:{quantity},價(jià)格:{price}元")returnnew_id案例實(shí)現(xiàn)STEP05根據(jù)產(chǎn)品編號(hào)查找產(chǎn)品根據(jù)產(chǎn)品編號(hào)查找產(chǎn)品在數(shù)據(jù)框中的索引。使用布爾索引篩選出編號(hào)等于指定編號(hào)的行,并獲取其索引。如果未找到匹配的產(chǎn)品,打印錯(cuò)誤信息并返回False。否則,返回第一個(gè)匹配行的索引。defget_product_by_id(product_id,df):index=df.index[df["編號(hào)"]==product_id].tolist()#查找產(chǎn)品ifnotindex:print(f"錯(cuò)誤:未找到編號(hào)為{product_id}的產(chǎn)品")returnFalsereturnindex[0]案例實(shí)現(xiàn)STEP06處理進(jìn)貨操作處理產(chǎn)品的進(jìn)貨操作,更新庫存數(shù)量、進(jìn)貨價(jià)格和進(jìn)貨日期,并更新Excel文件。defrestock(product_id,quantity,price):df=pd.read_excel(DATA_FILE,sheet_name=SHEET_NAME)index=get_product_by_id(product_id,df)#更新庫存和價(jià)格df.loc[index,"庫存數(shù)量"]+=quantitydf.loc[index,"進(jìn)貨價(jià)格"]=pricedf.loc[index,"上次進(jìn)貨日期"]=datetime.now().strftime("%Y-%m-%d")df.loc[index,"是否需要補(bǔ)貨"]=df.loc[index,"庫存數(shù)量"]<=df.loc[index,"最低庫存預(yù)警值"]df.to_excel(DATA_FILE,sheet_name=SHEET_NAME,index=False)print(f"已完成進(jìn)貨:產(chǎn)品{df.loc[index,'名稱']},數(shù)量:{quantity},新價(jià)格:{price}元")returnTrue案例實(shí)現(xiàn)STEP07處理銷售操作處理產(chǎn)品的銷售操作,更新庫存數(shù)量和銷售日期,并更新Excel文件。defsell(product_id,quantity):df=pd.read_excel(DATA_FILE,sheet_name=SHEET_NAME)index=get_product_by_id(product_id,df)#檢查庫存是否足夠current_stock=df.loc[index,"庫存數(shù)量"]ifcurrent_stock<quantity:print(f"錯(cuò)誤:庫存不足,當(dāng)前庫存:{current_stock},需求:{quantity}")returnFalse#更新庫存df.loc[index,"庫存數(shù)量"]-=quantitydf.loc[index,"上次銷售日期"]=datetime.now().strftime("%Y-%m-%d")df.loc[index,"是否需要補(bǔ)貨"]=df.loc[index,"庫存數(shù)量"]<=df.loc[index,"最低庫存預(yù)警值"]df.to_excel(DATA_FILE,sheet_name=SHEET_NAME,index=False)print(f"已完成銷售:產(chǎn)品{df.loc[index,'名稱']},數(shù)量:{quantity}")returnTrue案例實(shí)現(xiàn)STEP08檢查需要補(bǔ)貨的產(chǎn)品檢查庫存中需要補(bǔ)貨的產(chǎn)品,并輸出相關(guān)信息。讀取現(xiàn)有的庫存數(shù)據(jù)。使用布爾索引篩選出是否需要補(bǔ)貨為True的產(chǎn)品。如果沒有需要補(bǔ)貨的產(chǎn)品,則輸出提示信息并返回空列表。否則,遍歷需要補(bǔ)貨的產(chǎn)品并輸出相關(guān)信息,同時(shí)返回這些產(chǎn)品的字典列表。defcheck_low_stock():df=pd.read_excel(DATA_FILE,sheet_name=SHEET_NAME)low_stock_products=df[df["是否需要補(bǔ)貨"]==True]#篩選需要補(bǔ)貨的產(chǎn)品iflow_stock_products.empty:print("所有產(chǎn)品庫存充足,無需補(bǔ)貨")return[]print("\n需要補(bǔ)貨的產(chǎn)品:")for_,rowinlow_stock_products.iterrows():print(f"-{row['名稱']}(編號(hào):{row['編號(hào)']}):庫存{row['庫存數(shù)量']},預(yù)警值{row['最低庫存預(yù)警值']}")returnlow_stock_products.to_dict('records')案例實(shí)現(xiàn)STEP09顯示所有產(chǎn)品庫存信息顯示庫存中所有產(chǎn)品的詳細(xì)信息。讀取現(xiàn)有的庫存數(shù)據(jù)到DataFrame中。如果DataFrame為空,則輸出庫存為空的信息并返回。輸出表頭和分隔線。遍歷DataFrame中的每一行,格式化輸出產(chǎn)品的詳細(xì)信息。defshow_all_products():df=pd.read_excel(DATA_FILE,sheet_name=SHEET_NAME)ifdf.empty:print("庫存為空")

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論