아마 파이썬 스크립트를 실행할 때 커맨드 라인에서 인자를 전달하기 위해서 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에 함수 이름을 넣어주면 됩니다.

블로그 이미지

NCookie

,