暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python批量处理示例

数据运营与数据分析 2021-04-12
295

今日分享


Python批量处理示例


阅读本文大概约5分钟


1、批量压缩

import  zipfile
import os
import time
#待压缩的文件夹
start_dir = r"C:\Users\CQ375\Desktop\压缩前"  
#目的地文件夹
target_dir = r"C:\Users\CQ375\Desktop\压缩后"
#如当前日期的文件夹不存在则创建一个,如果存在则无需要创建
today = target_dir + os.sep + time.strftime('%Y%m%d')
if not os.path.exists(today):
    os.mkdir(today)
    print('Successfully created directory', today)
#取出start_dir文件夹下的每个文件进行压缩备份
for item in os.listdir(start_dir):
    file_news = today+os.sep+item+'.zip' 
    z = zipfile.ZipFile(file_news,'w'
    z.write(start_dir+os.sep+item,item) #从待压缩文件夹取出文件,写入到对象z;start_dir+os.sep+item代表的是要写入z的文件是哪一个
z.close() #完成写入后关闭对象
print(item)
print ('压缩成功')

2、批量新建文件夹

import os 
file_path=os.path.abspath(r"C:\Users\CQ375\Desktop\新建文件夹")
for i in range(1,26):
    a="建筑编号{0}".format(i)
    file_name=file_path+"\\"+a
    os.makedirs(file_name)

3、批量转换文件格式(xls-xlsx)

import win32com.client as win32
import os.path
import os
def GetDesktopPath():
    return os.path.join(os.path.expanduser("~"), 'Desktop')


def xlsToxlsx():
    rootdir = f'{GetDesktopPath()}\\data\\转换前' #需要转换的xls文件存放处
    rootdir1 = r"C:\Users\CQ375\Desktop\data\转换后" #转换好的xlsx文件存放处
    files = os.listdir(rootdir) #列出xls文件夹下的所有文件
    num = len(files) #列出所有文件的个数
    for i in range(num): #按文件个数执行次数
        kname = os.path.splitext(files[i])[1#分离文件名与扩展名,返回(f_name, f_extension)元组
        if kname == '.xls'#判定扩展名是否为xls,屏蔽其它文件
            fname = rootdir + '\\' + files[i] #合成需要转换的路径与文件名
            fname1 = rootdir1 + '\\' + files[i] #合成准备存放转换好的路径与文件名
            excel = win32.gencache.EnsureDispatch('Excel.Application'#调用win32模块
            wb = excel.Workbooks.Open(fname) #打开需要转换的文件
            wb.SaveAs(fname1+"x", FileFormat=51#文件另存为xlsx扩展名的文件
            wb.Close()
            excel.Application.Quit()

if __name__ == '__main__':
    xlsToxlsx()

4、批量合并

#数据合并,不同的文件合并到同个表中不同的sheet中
import pandas as pd
import os

# 结果文件
result = pd.ExcelWriter('C:/Users/CQ375/Desktop/data/合并结果.xlsx')
# 获取表格列表
origin_file_list = os.listdir(r'C:\Users\CQ375\Desktop\data\转换后')
print(origin_file_list)
# 循环遍历表格
for i in origin_file_list:
    print(i)
    excel_file_name = i
    #拼接每个文件的路径
    file_path = 'C:/Users/CQ375/Desktop/data/转换后/%s' % i
    print(file_path)
# 读取文件内容     
    #content = pd.read_excel(file_path, skiprows=[0])  # 跳过0行
    content = pd.read_excel(file_path)
    sheet_name = i[:len(i) - 4]
    content.to_excel(result, sheet_name, index=False)
result.save()

5、批量提取基本信息表

#加载文件清单
root=r"C:\Users\CQ375\Desktop\资料文件夹"
mylist=[]
for dirpath,dirnames,filenames in os.walk(root):
    for filepath in filenames:
        mylist.append(os.path.join(filepath))
#构建提取数据表头
data=pd.DataFrame({"名称":["建筑编号","建筑地址","建筑面积","联系电话"]})    
for i in range(len(mylist)):
    try:
        pd.set_option("display.max.columns",None)
        pd.set_option("display.precision",2)
        df=pd.read_excel(r"C:\Users\CQ375\Desktop\资料文件夹\{0}".format(mylist[i]),header=2)
        df1=df.iloc[:,[0,2,3,4]]
        df2=df1.copy()
        building_name=df2.loc[1][1]
        #建筑编号
        building_id=df2.loc[2][1]
        #建筑地址
        address=df2.loc[1][1]
        # 建筑面积
        building_area=df2.loc[4][1]
        # 联系电话
        TEL=df2.loc[3][3]
        data[mylist[i]]=[building_id,address,building_area,TEL]

    except Exception as e:
        continue 
DATA=data.set_index("名称").T 
DATA

6、批量提取峰值数据

DATA=pd.DataFrame({"提取参数":["建筑名称","建筑分类","时间","小时电耗量"]})  
for i in range(len(mylist)):
    try:
        df=pd.read_excel(r"C:\Users\CQ375\Desktop\data\指标提取\{0}.xlsx".format(mylist[4]))
        building_name=df.建筑名称.unique()[0]
        building_type=df.建筑分类.unique()[0]
        df1=df[["时间","电耗量"]].set_index("时间")
        df2=pd.DataFrame(df1).dropna()
        df3=df2.drop_duplicates("电耗量")
        df4=df3.sort_values(by="电耗量",ascending=False
        EP_list1=list(df4["电耗量"].values)
        median_a = np.median(list(EP_list1))
        #截取大于中位数的数据筛选比较
        df5=df4[df4.电耗量>median_a].copy()
        data=list(df5["电耗量"].values)
#截取满足一定条件的数据保存,去除异常点
        def spread(lst):
            length=len(lst)
            for k in range(1,length):
                if lst[k-1]/lst[k]<1.5:
                    yield k-1,lst[k-1]
        #时间点
        time_index=list(spread(data))[0][0]
        time_point=df5.index[time_index]
        max_1=list(spread(data))[0][1]
        DATA[mylist[i]]=[building_name,building_type,time_point,max_1]
    except Exception as e:
            continue
DATA.T.to_excel(r"C:\Users\CQ375\Desktop\data\结果.xlsx")


文章转载自数据运营与数据分析,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论