엑셀 파일(.xlsx)에 고객들의 질문('QUESTION')과 그 질문의 주제('TOPIC'), 그에대한 답변('ANSWER')등이 담겨있다.
여기서 나는 고객들의 질문과 그 질문의 주제만 가져와서
csv파일에 나란히 2개의 행으로 저장하려고 한다.
우선 엑셀파일의 데이터를 처리할 수 있는 모듈인 xlrd를 import한다.
질문들의 주제('TOPIC')를 리스트에 저장했다.
여기서 나는 고객들의 질문('QUESTION') 또한 리스트에 저장하여
이 리스트들을 csv파일에 한 줄 씩 담고 싶은 것이다.
<예시>
그래서 코드를 짜보았다(급 전개)
에러 발생!
뭔고하니... 인코딩 에러다
\U0001f31f
뭐지?
바로...
🌟
요놈이었다. 대체 누가 상담 글에 저런 이모티콘을 쓰는거냐곸ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
아니지... 그럴 수도 있지
그러면 해결책을 생각해보자!
1. 이모티콘을 인코딩할 수 있는 인자값이나 다른 메소드들이 있지 않을까?
2. 정규식을 사용해서 우리가 받아들일 특수기호들 말고는 없애버릴까?
2. 정규식을 사용해서 우리가 받아들일 특수기호들 말고는 없애버리기
: 정규식을 다루는데 사용되는 re 모듈의 sub메소드를 사용해서 내가 미리 정한 문자(pattern)외에는 지워버려보자
line 21에서 볼 수 있듯이, pattern이라는 변수에 내가 읽어들이고 싶지않은('^'표시에 주의) 문자들만 저장을 하고,
line 28에서 sub메소드의 인자로 pattern변수를 대입한다.
sub(pattern, repl, string)메소드는 stirng에서 pattern과 일치하는 부분에 대하여 repl로 교체하여 결과 문자열을 반환한다.
<참고> (출처 : http://devanix.tistory.com/296)
[ re모듈의 주요 메소드 ]
[메소드] | [설명] |
compile(pattern[, flags]) | pattern을 컴파일하여 정규식 객체를 반환 |
match(pattern, string[,flags]) | string의 시작부분부터 pattern이 존재하는지 검사하여 MatchObject 인스턴스를 반환 |
search(pattern, string[,flags]) | string의 전체에 대해서 pattern이 존재하는지 검사하여 MatchObject 인스턴스를 반환 |
split(pattern, string[, maxplit=0]) | pattern을 구분자로 string을 분리하여 리스트로 반환 |
findall(pattern, string[, flags]) | string에서 pattern을 만족하는 문자열을 리스트로 반환 |
finditer(pattern, string[, flags]) | string에서 pattern을 만족하는 문자열을 반복자로 반환 |
sub(pattern, repl, string[, count=0]) | string에서 pattern과 일치하는 부분에 대하여 repl로 교체하여 결과 문자열을 반환 |
subn(pattern, repl, string[, count=0]) | sub와 동일하나, 결과로(결과문자열, 매칭횟수)를 튜플로 반환 |
escape(string) | 영문자 숫자가 아닌 문자들을 백슬래쉬 처리해서 리턴. (임의의 문자열을 정규식 패턴으로 사용할 경우 유용) |
최종 코드
'공부 > 16산학프로젝트' 카테고리의 다른 글
참고 사이트 목록 (0) | 2017.04.07 |
---|---|
[16산학프로젝트] 봇은 어떻게 웹과 모바일 앱을 무너뜨릴 수 있을까 (0) | 2017.02.27 |
[16산학프로젝트/Python]HTML 태그 제거하기 (0) | 2017.02.21 |
[16산학프로젝트/Python]3주차 (0) | 2017.02.21 |
[16산학프로젝트/Python]텍스트파일을 csv파일로 바꾸기 (0) | 2017.02.15 |