본문 바로가기
● 인공지능, 분석/20.12 생활 프로그래밍

[4. CSV] try except문 활용하기

by 0ver-grow 2021. 1. 11.
반응형

하단 코드의 한계는 뭘까?

>>> p = ['123Jongrogu', '151,000', '102,305' ,'25,456']
>>> for j in i :
	if re.search('[a-z가-힣]',j) : # 알파벳, 한글인 경우 그대로 사용
		i[i.index(j)] = j # i.index(j)는 j가 있는 인덱스 번호
	else : # 알파벳, 한글이 아닌 경우, 하단 형태로 수정
		i[i.index(j)] = (float(re.sub(',','',j)))

		
>>> i
['Jongrogu', 151767.0, 11093.0, 27394.0]

바로, p 요소 중 알파벳과 한글이 아닌 요소(특수문자, 빈 문자열 등)가 있을 때, 오류가 발생한다는 것이다

 

이 때 예외처리를 적용하면 간단해진다.

>>> i = ['123!!', '151,151', '', '!@#']
>>> for j in i :
	try : # float()함수가 오류를 일으키지 않는 경우 변경
		i[i.index(j)] = float(re.sub(',','',j))
	except : # float()함수가 오류를 일으키면 예외 처리
		pass

	
>>> i
['123!!', 151151.0, '', '!@#']

조건문 대신 위처럼 예외처리를 적용하니 훨씬 간결해졌다.

 

예외처리를 통해 숫자만 골라서 수정하기

일부분(total[1])만 수정해보자

>>> i = total[1]
>>> for j in i :
	try :
		i[i.index(j)] = float(re.sub(',','',j))
	except :
		pass

	
>>> i
['Total', 9740398.0, 285529.0, 1468146.0]

정상적으로 작동하므로 total전체에 적용하자

>>> for i in total :
	for j in i :
		try :
			i[i.index(j)] = float(re.sub(',','',j))
		except :
			pass
>>> total
[['Gu', 'Korean', 'Foreigner', 'Senior'], ['Total', 9740398.0, 285529.0, 1468146.0], ...

정상적으로 작동한다면 이걸 함수로 만들고

def switch(listName) :
    for i in listName :
        for j in i :
            try :
                i[i.index(j)] = float(re.sub(',','',j))
            except :
                pass
    return listName

이 함수를 기존 usecsv.py 모듈에 포함시켜서 또 필요한 경우에 활용하자

import csv, os, re

def opencsv(filename) :
    f = open(filename, 'r')
    reader = csv.reader(f)
    output = []
    for i in reader :
        output.append(i)
    return output
    
def writecsv(filename, the_list) : 
    with open(filename, 'w', newline = '') as f :
        a = csv.writer(f, delimiter = ',')
        a.writerows(the_list)


def switch(listName):
    for i in listName:        
        for j in i:
            try:
                i[i.index(j)] = float(re.sub(',','',j))
            except:
                pass
    return listName

usecsv.py

 

skytreesea/do-it-python

Methods and classes in the book, "do it python" . Contribute to skytreesea/do-it-python development by creating an account on GitHub.

github.com

 

반응형