2013-02-25 40 views
0

我想更改下面的Python函數,以涵蓋我的business_code需要填充的所有情況。 Python函數處理這個異常,填充到左邊,直到達到給定的寬度,但我從來沒有使用過它。填充函數(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但我發現的business_codes在長度<變化和> 6。我被狀態驗證數據狀態。每個州的商業代碼長度都不相同(IL - 6 len,OH - 8 len)。所有代碼必須均勻填充。所以IL爲10的代碼應該產生000010等,我需要處理所有異常。使用命令行解析參數(argparse)和string.zfill。

+0

用'究竟string.zfill'什麼問題了嗎? – Cairnarvon 2013-02-25 23:17:50

+0

我的問題是我得到一個TypeError:zfill()只需要1個參數(0給定)。我傳入一個解析參數,詢問用戶業務代碼的長度(parser.add_argument(' - b',help ='指定業務代碼的長度',businessformat = args.d)。我不確定如何使用string.zfill引入參數(def formatBusinessCodes(code):, str.zfill(code)) – Tone 2013-02-26 15:10:53

回答

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}可作如下理解:

  • {...}手段代替從參數如下, (例如, 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 2013-02-27 13:39:33

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)