[Python/파이썬] CSV 파일 엑셀로 변환하기

코코._.

·

2021. 1. 13. 09:08

728x90




CSV 형식의 파일은 필드를 쉼표로 구분한 텍스트 파일이다. CSV 파일은 데이터의 크기가 작기때문에 방대한 양의 데이터를 다루는 산업계에서 널리 사용된다.

 

때때로 CSV 파일을 엑셀 파일로 변환해야할 경우가 있어서 파이썬 코드를 찾아보았다.

 

 

먼저, 아래와 같이 D:\practice 의 경로에 CSVtoEXCEL.csv 파일을 샘플로 만들었다.

 

 

 

 

CSV 형식의 파일을 엑셀 파일로 변경하는 코드를 적용해보았다.

1
2
3
4
5
6
7
8
9
10
11
12
13
import csv
from xlsxwriter.workbook import Workbook
 
file_path='D:/practice/CSVtoEXCEL.csv' #CSV 파일 
 
wb=Workbook(file_path[:-4]+'.xlsx')
ws=wb.add_worksheet()
with open(file_path,'rt',encoding='utf8'as f:
  reader=csv.reader(f)
  for r, row in enumerate(reader):
    for c, col in enumerate(row):
      ws.write(r,c,col)
wb.close()
cs

 

그 결과 아래와 같이 CSVtoEXCEL.xlsx 가 생성된 것을 확인할 수 있다.

 

 

 

 

 


 

지난번 여러개의 CSV을 하나의 CSV파일로 합치는 코드에서 마지막에 엑셀변환을 하는 코드를 추가해보겠다. 

wonderlandcoco.tistory.com/88

[Python/파이썬] CSV 여러 파일 하나로 합치기

우선 합칠 CSV file을 3개 만들어서 D:/practice/original/ 경로에 저장하였다. sample01, sample02, sample03 파일은 각각 아래와 같이 만들었다. 아래의 코드를 사용하여 CSV 파일을 하나로 합쳐보았다. 1 2 3..

wonderlandcoco.tistory.com

 

하지만 앞서 사용한 엑셀 변환 코드에서 에러가 발생했다.

1
2
3
4
5
6
7
8
9
workbook=Workbook(output_path[:-4]+'.xlsx'#엑셀변환코드
worksheet=workbook.add_worksheet()
with open(output_path,'rt',encoding='utf8'as f:
  reader=csv.reader(f)
  for r, row in enumerate(reader):
    for c, col in enumerate(row):
      worksheet.write(r,c,col)
 
workbook.close()
cs

 

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position 0: invalid start byte 라는 에러가 발생했다.

내가 사용한 파일에 한글이 포함되어있어서 utf-8 인코딩 방식을 사용하면 에러가 발생한다고 한다.

따라서 utf8을 cp949 혹은 euc-kr 으로 변경해주어야한다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import csv
import glob
import os
from xlsxwriter.workbook import Workbook
 
input_path = 'D:/practice/original/'
output_path = r'D:/practice/sample_merge.csv' #최종 파일명
 
 
file_list=glob.glob(input_path+'*.csv')
 
with open(output_path,'w'as f:
  for i, file in enumerate (file_list): #첫 번째 파일은 그대로 불러오기
    if i==0#첫 번째 파일은 그대로 불러오기
      with open(file,'r'as f2:
        while True:
          line=f2.readline()
          if not line:
            break
          f.write(line)
      print(file.split('\\')[-1])
 
    else:
      with open(file,'r'as f2:
        n=0
        while True:
          line=f2.readline()
          if n!=0 and n!=1 and n!=2 and n!=3 : #2번째 파일부터는 1,2,3,4번째 줄(헤더)제외
            f.write(line)
          if not line:
            break
          n+=1
      print(file.split('\\')[-1])
 
file_num=len(next(os.walk('D:/practice/original/'))[2])
print(file_num,' file merge complete...')
 
 
workbook=Workbook(output_path[:-4]+'.xlsx'#엑셀변환코드
worksheet=workbook.add_worksheet()
with open(output_path,'rt',encoding='CP949'as f:
  reader=csv.reader(f)
  for r, row in enumerate(reader):
    for c, col in enumerate(row):
      worksheet.write(r,c,col)
 
workbook.close()
 
cs

 

위의 코드를 적용하니 지난번 생성된 sample_merge.csv 파일이 정상적으로 sample_merge.xlsx 으로 변환되었다.

 

 

 

 

300x250