반응형
엑셀 파일 내용을 데이터로 사용하기 위해 JSON으로 변환하여 사용 중인데...
귀찮아서 변환 프로그램을 만들었다.
처음엔 xrld를 사용하여 로딩하였는데... xlsx를 지원하지 않는단다.
OpenPyXL이라는 라이브러리가 xlsx를 지원하는데, pandas에서 openpyxl을 사용하여 로딩이 된다고 하여
pandas를 베이스로 적용해 보았다.
from collections import OrderedDict
import json
import re
import pandas as pd
excel_path = r'대충 예제 바일 경로.xlsx'
#excel_path = sys.argv[1];
sheet_no = 0
all_data = []
df = pd.read_excel(excel_path, engine = 'openpyxl', sheet_name=None)
for k in df.keys():
sh_data = OrderedDict()
sh_data['sheet'] = re.sub(r'[^0-9-]', '', k)
data_list = []
for row_index in range(len(df[k].index)):
data = OrderedDict()
data['row'] = row_index;
data['x'] = df[k].iat[row_index, 0]
data['y'] = df[k].iat[row_index, 1]
data['z'] = df[k].iat[row_index, 2]
data_list.append(data)
sh_data['datas'] = data_list
all_data.append(sh_data)
j = json.dumps(all_data, ensure_ascii=True)
with open('c:/temp/test.json', 'w+') as f:
f.write(j)
입력 argument로 경로를 입력하게 했는데, 'u202a'가 계속 앞에 붙어서 경로를 지정하고 기능만 구현했다.
engine = 'openpyxl'
위 옵션을 설정하면 xlsx 파일을 로딩할 수 있고
sheet_name=None
위 옵션을 설정하면 모든 sheet를 한꺼번에 로딩할 수 있게 된다.
대충 위 프로그램은 모든 sheet를 로딩하고
sheet 이름에서 숫자만 추출하여 키로 정의하고
sheet 내의 1, 2, 3 행을 x, y, z 값으로 저장되도록 한다.
[
{
"sheet": "0",
"datas": [
{
"row": 0,
"x": 5.25885379322123,
"y": -0.0470282206786359,
"z": -3.57784813096792e-06
},
원하는 대로 추출은 잘 된다.
반응형
'Programming' 카테고리의 다른 글
[WSL2] 디스크 용량 늘리기 (0) | 2021.11.27 |
---|---|
[git] 오류 관련 처리 2 (0) | 2021.11.16 |
[git] Filename too long 에러 관련 (0) | 2021.09.22 |
[git] 저장소 이동하기 (0) | 2021.09.15 |
[git] 오류 관련 처리 (0) | 2021.04.12 |