게임 개발 + 인턴 생활에 허덕이는 요즘입니다...
인턴십에선 주로 웹개발을 해
게임개발과 관련이 크지 않은데요
두 작업의 공통점이 둘다 열심히 파이썬을 쓰고 있다는 것입니다!!!
1. 엑셀 데이터를 일괄 변환해 활용
2. 데이터 입력 받아 새로운 문자열로 뽑아내기
등등
일일이 했으면 우와 눈 뽑히겠다 싶은 작업들을
파이썬이 대신 해주고 있습니다 ㅎㅎ
오늘은 같이 엑셀시트를 변환해보시죠!!
[ 상황 ]
이건 잉크라는 프로그램이고
유니티에서 대화 스크립트를 출력하기 위해 필요한 툴입니다.
(나중에 기회가 된다면 이 기능에 대해서도 작성해볼게요 ~_~)
여기서 문제는 스크립트를 맡은 기획팀에서 작성하게 되는데,
1. 기획팀에서 위 태그를 다 작성하면 효율 떨어짐
2. 기획팀은 엑셀이 더 익숙하고 편함
위와 같은 이유로 엑셀시트를 잉크 텍스트에 맞게 변환해보자!
라고 생각했습니다.
[ 원하는 결과 ]
이런 시트를 파이썬 프로그램으로 돌리면
이런 텍스트로 나오길 원함.
(나온 텍스트는 잉크 프로그램에 복붙!)
[ 해결 ]
0. 환경 설정
- 프로그램 : 엑셀, VSC
- 언어 : python
1. 라이브러리 설치
엑셀 변환을 위한 라이브러리 'openpyxl' 설치
pip install openpyxl
# pip 설치 X
python3 get-pip.py
pip 설치 오류 나는 경우는 여기로 >>
vscode 빠르고 간단하게 pip 설치하기(openpyxl 임포트, 파이썬 세팅)
오랜만에 파이썬 좀 하려니 vscode 가 pip 를 모른 척 합니다... 그래서 간단히 할 수 있는 비주얼스튜디오코드 pip 적용하기!! 다들 직접 환경변수 path 수정하시던대... 1. 어디 깔려있는지 모름 2. path
hot-computer.tistory.com
2. 코드 작성
전 항상 라이브러리를 볼 때 공식 문서를 중요시 여깁니다..
(하지만 습관적으로 뻗어보는 구글의 손길)
Tutorial — openpyxl 3.1.0 documentation
There is no need to create a file on the filesystem to get started with openpyxl. Just import the Workbook class and start work: A workbook is always created with at least one worksheet. You can get it by using the Workbook.active property: Sheets are give
openpyxl.readthedocs.io
전 openpyxl 라이브러리를 생전 처음봐요!
여기서 튜토리얼을 확인하고 오십쇼. 저보다 낫습니다.
2-1. 라이브러리 임포트
저의 경우엔 엑셀 시트 변경이 아닌
엑셀 시트 불러오기만 필요하기에 위와 같이 설정해줍니다.
!/usr/bin/python3
#ex command : python changer.py test.xlsx result.txt
from openpyxl import load_workbook
import sys
input_path = sys.argv[1]
output_path = sys.argv[2]
wb = load_workbook(filename = input_path)
# file name example = script.xlsx
sheet = wb['Sheet1']
sys.argv는 뭐예요?
터미널에서 파이썬코드를 실행시킨다고 가정했을 때
python [코드.py] [읽어올 엑셀.xlsx] [결과.txt]
와 같이 입력할 예정입니다.
argv는 저 명령어의 옵션들을 의미함으로
sys.argv[1] == [읽어올 엑셀.xlsx] 가 됩니다.
그래서 읽어올 엑셀 파일을 등록해준 뒤,
읽어올 시트이름을 등록해줍니다.
엑셀의 요것!
2-2. 정의된 태그 읽어오기
이 부분을 변환시켜줄 것입니다.
# Read the Tag List (row==1)
tag_list = []
col_num = 2 # B열부터 태그이기에 2번째 열부터 읽어줌.
while True:
col_tag = sheet.cell(1, column = col_num).value
# 셀의 값 읽어오기: sheet.cell(row=row_index, column=column_index).value
# 셀(행, 열)
if col_tag == None: # 셀 값 없다면 반복문 종료
break
tag_list.append(col_tag) # 태그 리스트에 추가
col_num += 1
print(tag_list)
2-3. 스크립트 읽어오기
이번엔 이 부분을 변환시켜줄 것입니다.
# Read Real Data & Make a Line
row_num = 2 # 엑셀에 따라 두 번째 행부터 읽어올 것임
line = ""
while True:
# Read Plain Text
col_plain = sheet.cell(row = row_num, column = 1).value
if col_plain == None:
break
line += col_plain + " " # '대사 ' <- 위와 같이 문자열 만들어주기
#Read Tag Value
col_num = 2 # 태그의 시작인 두 번째 열부터 읽어줌
for tag in tag_list: # 태그key 리스트 value 반복
col_tagval = sheet.cell(row = row_num, column = col_num).value # 태그 값 읽어오기
if col_tagval != None: # 태그 값이 있다면!
line += "#" + tag + ":" # -> '대사 #태그키:'
line += str(col_tagval) + " " # -> '대사 #태그키:태그값'
col_num += 1 # 다음 태그값으로
line += "\n" # 줄바꿈
row_num += 1 # 다음 행으로
print(line)
2-4. line 문자열을 텍스트 파일로 저장
# Save the Script as Text
f = open(output_path, "wt")
f.write(line)
f.close()
3. 실행 결과
VSC 터미널에서 실행이 잘 안 된 관계로 폴더에서 바로 실행시켜주었습니다.
요렇게 완성!
텍스트 파일도 제대로 저장되었습니다 ~_~
도움이 되셨길 바랍니다 :)
'Programming > Python' 카테고리의 다른 글
vscode 빠르고 간단하게 pip 설치하기(openpyxl 임포트, 파이썬 세팅) (1) | 2023.02.09 |
---|