# python提取各个扇区不同机位点风速风向表

## 技术分解

1. 遍历
2. 建立一个扇区表和特征物理量【标识信息即可】， 该特征物理量为velocity表示提取偶数行，物理量为Angle表示提取奇数行
3. 对特定的物理量进行atan2计算，atan2(vx,vy)得到[-pi,+pi]范围值，加上180°就变成了[0,2pi]
4. 导出数据

## 技术实现

1. 建立扇区表, 即excel表列信息
columnMe=['0','22','45','67','90','112','135','157','180','202','225','247','270','292','315','337'];
1. 建立机位风速、风向信息,即excel表行信息

    indexMe=["T12_Velocity", "T12_Angle", "T11_Velocity", "T11_Angle", "T10_Velocity", "T10_Angle", "T1_Velocity", "T1_Angle",
"T3_Velocity", "T3_Angle", "T2_Velocity", "T2_Angle", "T4_Velocity", "T4_Angle", "T5_Velocity", "T5_Angle",
"T9_Velocity", "T9_Angle", "T8_Velocity", "T8_Angle", "T7_Velocity", "T7_Angle", "T6_Velocity", "T6_Angle",
"T13_Velocity", "T13_Angle", "T14_Velocity", "T14_Angle", "T15_Velocity", "T15_Angle", "T16_Velocity", "T16_Angle",
"T17_Velocity", "T17_Angle", "T23_Velocity", "T23_Angle", "T22_Velocity", "T22_Angle", "T21_Velocity", "T21_Angle",
"T20_Velocity", "T20_Angle", "T19_Velocity", "T19_Angle", "T18_Velocity", "T18_Angle", "HL387_24035001_Velocity",
"HL387_24035001_Angle"]


1. 使用pandas创建数组、存储文件

results=pd.DataFrame([],index=indexMe,columns=columnMe)

results.iloc[turbineVId,sectorId]=speed2d
results.iloc[turbineAId,sectorId]=actualAngle

import numpy as np
import pandas as pd
import os
import re
import math as ma

## 遍历所有csv文件
all = []
for fpathe,dirs,fs in os.walk(path):   # os.walk是获取所有的目录
for f in fs:
filename = os.path.join(fpathe,f)
if filename.endswith(rule):  # 判断是否是"xxx"结尾
all.append(filename)
return all

if __name__ == "__main__":
## 定义计算的扇区表
columnMe=['0','22','45','67','90','112','135','157','180','202','225','247','270','292','315','337'];
## 定义风向风速表的行信息
indexMe=["T12_Velocity", "T12_Angle", "T11_Velocity", "T11_Angle", "T10_Velocity", "T10_Angle", "T1_Velocity", "T1_Angle",
"T3_Velocity", "T3_Angle", "T2_Velocity", "T2_Angle", "T4_Velocity", "T4_Angle", "T5_Velocity", "T5_Angle",
"T9_Velocity", "T9_Angle", "T8_Velocity", "T8_Angle", "T7_Velocity", "T7_Angle", "T6_Velocity", "T6_Angle",
"T13_Velocity", "T13_Angle", "T14_Velocity", "T14_Angle", "T15_Velocity", "T15_Angle", "T16_Velocity", "T16_Angle",
"T17_Velocity", "T17_Angle", "T23_Velocity", "T23_Angle", "T22_Velocity", "T22_Angle", "T21_Velocity", "T21_Angle",
"T20_Velocity", "T20_Angle", "T19_Velocity", "T19_Angle", "T18_Velocity", "T18_Angle", "HL387_24035001_Velocity",
"HL387_24035001_Angle"]
## 创建一个空的DataFrame空结构,结构index由indexMe组成，结构的columns信息由columnMe组成
results=pd.DataFrame([],index=indexMe,columns=columnMe)
b = get_files()
altitudesName=[]
for i in b:
them=i.split("\\")
currentFilename=them[them.__len__()-1]
turbinesAndSectors=re.split(r'[.|-]',currentFilename)
## 文件名第一项为风机信息
currentTurbine=turbinesAndSectors[0]
## 文件名倒数第二项为扇区信息---拆分的时候识别sector信息
currentSector=turbinesAndSectors[turbinesAndSectors.__len__()-2]
# sheetName=them[them.__len__()-3]+them[them.__len__()-2]+them[them.__len__()-1]
## 得到SectorID index用于存储数据
sectorId=columnMe.index(currentSector);
turbineVId=indexMe.index(currentTurbine+"_Velocity")
turbineAId=indexMe.index(currentTurbine+"_Angle")
## 去除Null行（注意空格，数字也一样处理)
## 确认了第九行信息为所需要的信息 ，也可以做个线性化操作
UCRT=sd.iloc[9,2]
VCRT=sd.iloc[9,3]
speed2d=sd.iloc[9,5]
## 有趣的是： python atan2(y,x) 而在excel对应的为 atan2(x,y) -->只是针对和x轴夹角
##   如果需要针对y轴夹角必须采用python的atan2(x,y), 或者 excel的atan2(y,x)才是扇区角度的意思
actualAngle=ma.atan2(UCRT,VCRT)*180/3.1415926+180
## 赋值
results.iloc[turbineVId,sectorId]=speed2d
results.iloc[turbineAId,sectorId]=actualAngle

results.to_csv("Results-WindSimSpeedTableZhuFengxiagn.csv",index=indexMe,columns=columnMe)
##### 令狐冲
###### Engineer of offshore wind turbine technique research

My research interests include distributed energy, wind turbine power generation technique , Computational fluid dynamic and programmable matter.