# 문제발생
지난번 openpyxl로 단가를 긁어와서 입력했던거에 추가로 평균단가를 입력해야한다.
엑셀파일은 두개이며, 첫번째 엑셀파일에는 최근 약 1년치의 품목코드 별 단가가 작성되어있고,
두번째 엑셀파일에는 품목코드만 입력되어있다
6개월을 기준으로 중복되는 모든값을 구해서 평균값으로 두번째 엑셀파일에 입력해줘야 한다.
# 해결 아이디어
1. 평균구하기
def average(list):
return (sum(list)) / len(list)
2. 첫번째 엑셀파일에는 품목코드가 굉장히 많이 중복되고있다, 기간별 단가만 상이하므로 품목코드:0의 형태로 딕셔너리로 만든다.
( 딕셔너리의 키값은 중복이 허용되지 않는 특성 이용 )
3. 빈 리스트를 만들어서 딕셔너리에 저장된 키값과 첫번째 엑셀의 품목코드가 일치할때 같은 행에있는 단가를 리스트에 append
4. 딕셔너리에 저장된 키값과 두번째 엑셀파일에 품목코드가 일치할때 같은 행에 평균단가를 입력
늘 그렇듯 거창한 계획부터 세우고 본다..
완성된 형태는 대략 다음과 같다
baseList = { 'aa001' : 0 , 'aa002' : 0 , ....}
lis = [3000,2900,3000,3100,....] # aa001일때
lis = [1000,1200,1100,1200,....] # aa002일때 # 코드에 따라 계속 바뀌고 초기화됨
import openpyxl
wb = openpyxl.load_workbook(filename='첫번째 엑세파일.xlsx')
wb2 = openpyxl.load_workbook(filename='두번째 엑셀파일.xlsx')
a_sheet = wb['시트1']
a2_sheet = wb['시트2']
b_sheet = wb2['시트1']
def average(list):
return (sum(list)) / len(list)
baseList = {}
for i in range(2,1199):
baseList[a_sheet['b' + str(i)].value] = 0
for j in range(0,len(baseList.keys())):
code = list(baseList.keys())[j]
lis = []
for n in range(2,1199):
if code == a_sheet['b'+str(n)].value:
lis.append(a_sheet['e'+str(n)].value)
for nu in range(2,4128):
if code == b_sheet['a'+str(nu)].value:
b_sheet['g'+str(nu)] = average(lis)
wb2.save('저장할 파일명.xlsx')
print('완료')
# range함수의 숫자는 긁어올, 입력할 열의 구간
# 후기
그리고 다 완성되고나니 드는 생각인데, 엑셀 자체에 이미 코드짜놓은거랑 흡사한 기능이 있을거같다...
파이썬으로 돌리는거만큼 빠른 속도를 보여줄지는 모르겠지만?
'python' 카테고리의 다른 글
[단순반복작업은 파이썬으로!] 엑셀 빅(?)데이터 간단 작업 (0) | 2021.11.22 |
---|---|
크롤링 완성(?) (0) | 2021.11.22 |
웹 스크랩핑(크롤링)_2 (0) | 2021.11.18 |
웹 스크랩핑(크롤링) (0) | 2021.11.18 |
Python - 기초개념2 (0) | 2021.11.18 |