openpyxl을 이용하여 엑셀 파일에서 데이터를 한 줄씩 읽으면서 배열에 담는 코드를 만들었다. 배열에 담을 때 첫번째 열에는 1부터 시작하는 순번을 삽입하도록 했다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import openpyxl as xl wb = xl.load_workbook('./excel/OO아파트 과거시세.xlsx') ws = wb['과거시세'] sheetrows = [] i = 0 idx = 1 for row in ws.values: row.insert(0, idx) sheetrows.insert(i, row) i += 1 idx += 1 |
하지만 실행을 하면 아래와 같은 오류가 발생한다.
AttributeError: 'tuple' object has no attribute 'insert'
왜 그럴까? 이유는 ws.values에서 뽑아낸 자료형이 tuple이기 때문이다. tuple은 값을 바꿀 수 없다. 그러므로 각 row의 첫번째 열에는 순번을 넣을 수 없다.
순번을 넣으려면 tuple을 list로 변환해야 한다. list는 값을 수정하거나 삭제할 수 있는 자료형이기 때문이다. 이런 경우 tuple을 list로 변환하는 함수를 사용하면 쉽게 처리할 수 있었다.
1 2 3 4 5 6 | for row in ws.values: tmpList = list(row) tmpList.insert(0, idx) sheetrows.insert(i, tmpList) i += 1 idx += 1 |
꺼내고, 새로운 자료형에 넣고, 다시 첫 열에 값을 삽입하는 동작을 루프만큼 반복하도록 했다. 과연 최선일까?
0 댓글