今日分享
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




