2013-02-25 3 views
0

내 비즈니스 코드에 패딩이 필요한 모든 상황을 다루기 위해 아래 Python 함수를 변경하고 싶습니다. string.zfill 파이썬 함수는이 예외를 처리합니다. 주어진 너비에 도달 할 때까지 왼쪽으로 패딩하지만 이전에는 사용하지 않았습니다.패딩 함수 (Python) string.zfill

#function for formating business codes 
def formatBusinessCodes(code): 
    """ Function that formats business codes. Pass in a business code which will convert to a string with 6 digits """ 
    busCode=str(code) 
    if len(busCode)==1: 
     busCode='00000'+busCode 
    elif len(busCode)==2: 
     busCode='0000'+busCode 
    else: 
     if len(busCode)==3: 
      busCode='000'+busCode 
    return busCode 

#pad extra zeros 
df2['business_code']=df2['business_code'].apply(lambda x: formatBusinessCodes(x)) 
businessframe['business_code']=businessframe['business_code'].apply(lambda x: formatBusinessCodes(x)) 
financialframe['business_code']=financialframe['business_code'].apply(lambda x: formatBusinessCodes(x)) 

코드는 상기 (6)의 길이를 처리하지만 business_code I는 business_codes 길이 < 다를 것을 발견하고 있는데> 제 I 상태로 데이터 상태를 검증하고있다. 각 주마다 business_code 길이가 다릅니다 (IL - 6 len, OH - 8 len). 모든 코드는 균등하게 패딩되어야합니다. 따라서 10 인 IL의 코드는 000010을 생성해야합니다. 모든 예외를 처리해야합니다. 명령 줄 구문 분석 매개 변수 (argparse) 및 string.zfill 사용.

+0

'정확히 string.zfill'와 문제가 무엇입니까? – Cairnarvon

+0

제 문제는 TypeError가 발생했습니다. zfill()은 정확히 1 개의 인수 (0)를 취합니다. 사용자가 비즈니스 코드의 길이를 묻는 구문 분석 매개 변수를 전달합니다 (parser.add_argument ('-b', help = '비즈니스 코드 길이 지정, businessformat = args.d). string.zfill (def formatBusinessCodes (code) :, str.zfill (code))을 사용하여 인수를 가져 오십시오. – Tone

답변

5

당신은 str.format 사용할 수 있습니다

def formatBusinessCodes(code): 
    """ Function that formats business codes. Pass in a business code which will convert to a string with 6 digits """ 
    return '{:06d}'.format(code) 

In [23]: formatBusinessCodes(1) 
Out[25]: '000001' 

In [26]: formatBusinessCodes(10) 
Out[26]: '000010' 

In [27]: formatBusinessCodes(123) 
Out[27]: '000123' 

형식 {:06d}이 이해 될 수 다음과 같이

  • {...} 수단은 012,389,516에서 인수와 함께 다음과 같은 대체, (예 : code).
  • :
  • 0
  • 6 문자열의 폭 제로 패딩을 가능 포맷 사양을 시작한다. 그러나 6 자 이상의 숫자는 잘리지 않습니다.
  • d은 정수 유형이어야하는 인수 (예 : code)를 의미합니다. Python2.6에서

참고 형식 문자열이 필요가있는 0 추가 :

def formatBusinessCodes(code): 
    """ Function that formats business codes. Pass in a business code which will convert to a string with 6 digits """ 
    return '{0:06d}'.format(code) 
+0

음수 부호가 필요 없습니다. – Tone

0
parser.add_argument('-b',help='Specify length of the district code') 
businessformat=args.d 
businessformat=businessformat.strip() 

df2['business_code']=df2['business_code'].apply(lambda x: str(x)) 

def formatBusinessCodes(code): 
bus=code bus.zfill(4) 
return bus 

formatBusinessCodes(businessformat)