아마 파이썬 스크립트를 실행할 때 커맨드 라인에서 인자를 전달하기 위해서 argparse 모듈을 사용해 본적이 있으실 것입니다. 그런데 python 2.7에서는 유니코드 문자열을 전달하려고 하면 자꾸 거부를 합니다. (파이썬 2.x 버전은 문자열 인코딩이 제일 짜증나는 것 같습니다.)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb9 in position 0: ordinal not in range(128)
이 때 해결할 수 있는 방법이 있습니다. 바로 sys.getfilesystemencoding() 이라는 함수를 이용하는 것입니다, 예제 코드를 보겠습니다.
# -*- coding: utf-8 -*-
import argparse
import unicodecsv as csv
import sys
def commandline_arg(byte_string):
unicode_string = byte_string.decode(sys.getfilesystemencoding())
return unicode_string
parser = argparse.ArgumentParser()
parser.add_argument("-i", dest="input_file_name", default=None,
help="input file name(s) for CSV data to get data")
parser.add_argument("-target", dest="target_name", default=None,
type=commandline_arg,
help="target name is data for parsing")
parser.add_argument("-o", dest="output_file_name", default="data_set.csv",
type=commandline_arg)
args = parser.parse_args()
with open('input_data_set.csv', 'r') as r:
reader = csv.reader(r) # Here your csv file
lines = [l for l in reader if l[3] == args.target_name]
with open(args.output_file_name, 'wb') as w:
writer = csv.writer(w)
writer.writerows(lines)
위와 같이 comandline_arg(byte_string) 함수를 선언하고 args type에 함수 이름을 넣어주면 됩니다.
'파이썬' 카테고리의 다른 글
[파이썬] 가변인자 (0) | 2016.11.17 |
---|---|
[파이썬] 퍼스트 클래스 함수 (First Class Function) (0) | 2016.11.17 |
[파이썬] 퍼스트 클래스 시민 (FIRST CLASS CITIZEN, 1급 시민) (0) | 2016.11.17 |
[파이썬] 파이썬 공부 링크(코세라) (0) | 2016.11.14 |
[파이썬] 리눅스에서 파이썬으로 쉘 스크립트 실행하기 (0) | 2016.11.08 |