此篇起皆為實(shí)戰(zhàn)總結(jié)翎冲,以代碼+注釋+相關(guān)總結(jié)為主棘钞,基礎(chǔ)語法請自行學(xué)習(xí),注意各種數(shù)據(jù)類型間的不同就好柿估。
任務(wù)目標(biāo):
給定一年中每個(gè)月每一筆訂單的詳細(xì)信息(csv),需要輸出每個(gè)月的客戶名稱陷猫、業(yè)務(wù)類型秫舌、收入、成本并計(jì)算毛利(excel)
目標(biāo)拆解:
獲取文件夾下所有csv文件的文件路徑绣檬,依照文件路徑讀取csv文件足陨,摘取特定字段并做簡單計(jì)算,輸出excel
用到的庫:
os娇未,sys墨缘,numpy,pandas,csv飒房,xlwt
代碼詳情:
拆解代碼:
首先是導(dǎo)入所需要的庫搁凸,需要什么導(dǎo)入什么即可;
第二部分是通過walk()函數(shù)遍歷文件夾并搜尋相關(guān)文件狠毯,將文件名輸入到列表里护糖;
在此其中有些知識補(bǔ)充如下:
for root,dirs,names in os.walk(path):
#root返回根目錄,dirs返回路徑嚼松,names返回文件名嫡良,有dirs在可以保證遍歷每個(gè)子文件夾
? ? ? ? for filename in names:
? ? ? ? ? ? if os.path.splitext(filename)[1] == '.csv':
? ? ? ? ? ? #此項(xiàng)將文件名拆成了前后兩個(gè)部分,由于python的索引從0開始,截?cái)辔募?索引為0的部分是名稱,1的部分是擴(kuò)展名献酗;
? ? ? ? ? ? #擴(kuò)展名由最后一個(gè)“.”后決定,在此之前的都是文件名寝受,“123.456.csv.xlsx”的擴(kuò)展名是“.xlsx”
? ? ? ? ? ? ? ? doc = os.path.join(root,filename)
? ? ? ? ? ? ? ? #doc是含文件路徑和文件名在的絕對路徑,filename只是文件名
? ? ? ? ? ? ? ? print(doc)
? ? ? ? ? ? ? ? csvlist.append(doc)
第三部分是調(diào)用函數(shù)讀取文件路徑罕偎;
第四部分是通過for循環(huán)實(shí)現(xiàn)依次讀取批量操作:
for doc in csvlist:
? ? df = pd.read_csv(doc,encoding = "gbk")
? ? #函數(shù)詳情見pandas官方說明文檔很澄,主要編碼格式有utf-8、gbk颜及、gb2312等甩苛,可以在此指定讀取的列的數(shù)據(jù)類型
? ? df[["月份","客戶名稱","業(yè)務(wù)類型","收入不含稅","成本"]]
? ? #摘取特定列,可以通過df[["客戶"]=="a"][["收入"]]等形式同時(shí)做行列篩選
? ? df["毛利"] = df.apply(lambda df:df["收入不含稅"]-df["成本"],axis=1)
? ? #添加新列俏站,使用apply函數(shù)進(jìn)行即時(shí)運(yùn)算賦值讯蒲,axis=1表示列間計(jì)算,axis=0為行計(jì)算
? ? excel_name = os.path.splitext(doc)[0] + "-整理后.xlsx"
? ? #規(guī)定輸出的文件路徑和名稱肄扎,偷懶所以以原文件所在的路徑墨林、修改文件名輸出
? ? columns = {"月份","業(yè)務(wù)類型","客戶名稱","收入不含稅","成本","毛利"}
? ? #指定輸出的列及其順序
? ? df.to_excel(excel_writer = excel_name,sheet_name = "sheet1",index = False,columns=columns)
以上,其余總結(jié)等后續(xù)補(bǔ)充犯祠。
博客同作者旭等,https://blog.csdn.net/z1272578750/article/details/103697863,不定期更新衡载。