# 切割block
## 環境需要套件:
```typescript=
pip install pandas
pip install openpyxl
```
## 切割檔案執行指令:
```typescript=
python .\split.py '.\test\meta.xlsx' '.\test' '.\test\output'
```
.\split.py:執行的py檔
.\test\meta.xlsx:辨識檔的路徑及檔名
meta.xlsx(辨識檔):辨識檔式是讓程式知道哪個輸入檔的哪個Block要輸出成什麼檔名。檔案的第一行第一列必須填Block,每個輸入檔裡不要切割的Block用Blank或是-填滿(下圖為例)。檔名不一定要meta.xlsx,但副檔名一定要是.xlsx。第一列為要切割的檔案名,必須加上副檔名,可以處理.xlsx和.gpr。第一欄為哪一個block。表格裡面的欄位會是最後輸出的檔案名

.\test:放要被切割的檔案(.gpr和.xlsx)的資料夾路徑,也就是輸入檔(.gpr或.xlsx)必須是放在這個路徑底下
.\test\output:輸出的路徑,最後輸出的.xlsx會放在這個路徑底下
## 資料夾結構

## split.py程式碼:
```typescript=
import pandas as pd
import sys
import os
meta_path = sys.argv[1]
dir_path = sys.argv[2]
output_path = sys.argv[3]
try:
meta = pd.read_excel(meta_path, index_col=0, engine='openpyxl')
except:
meta = pd.read_excel(meta_path, index_col=0)
for file_name in meta.columns:
if '.gpr' in file_name:
with open (os.path.join(dir_path, file_name), mode="r") as file:
while True:
content = file.readline()
if ('Block' in content) and ('ID' in content) and ('Row' in content) and ('Column' in content):
data=file.readlines()
break
columns = content.replace('"','').strip('\n').split("\t")
data = [v.replace('"','').strip("\n").split("\t") for v in data]
df = pd.DataFrame(data, columns = columns)
elif '.xlsx' in file_name:
try:
df = pd.read_excel(os.path.join(dir_path, file_name), engine='openpyxl')
except:
df = pd.read_excel(os.path.join(dir_path, file_name))
if ('Block' and 'Column' and 'Row' and 'ID') not in df.columns:
for i in range(len(df)):
df_columns = list(df.iloc[i, :])
if ('Block' and 'Column' and 'Row' and 'ID') in df_columns:
break
df = df.iloc[i+1:, :]
df.columns = df_columns
df = df.reset_index(drop=True)
df.Block = df.Block.apply(str)
for block in meta.index:
label = meta.loc[block, file_name]
if(label != '-' and label != 'Blank'):
print(label)
split_block = df[df['Block'] == str(block)]
split_block.to_excel(os.path.join(output_path, (str(label) + '.xlsx')), index=False)
```