2016-12-24 6 views
0

が、私はこの文字列を持っているが:Pythonの - はIndexError:範囲外のリストインデックス - Forループ/ループ

string="R$ 35.0123. " 

私はそれをきれいにしたい、その最後のドットと、最後にそのスペースアウトを取ります。それは次のようになり作る:私はこのエラーを取得していますが

while string[-1].isdigit()==False: 
     string=string[:-1] 

IndexError: list index out of range 

奇妙なことは、私は「ということです

string:"R$ 35.0123" 

私はこれを使用しようとしていますこれはforループ内で実行しています。ループされたリストには1つの項目しかない場合はうまくいきます。リストに2つの項目がある場合、この問題が発生します。

アイデア? あなたのためにメリークリスマス。

BELOW FULL CODE (文字列である変数 "勇気")

if CNPJ in page: 
    CNPJloc=[] 
    for i in (re.finditer(CNPJ,page)): 
     CNPJloc.append(i.start()) 

    for i in CNPJloc: 
     CNPJposition=i 
     beg_string=["aviao"] 
     end_string="sicon" 
     for i in beg_string: 
      if i in lower_page[CNPJposition-200:]: 
       beg_string=i     
       extrato_de_contrato=page[lower_page.rfind(beg_string,0,CNPJposition):lower_page.find(end_string,CNPJposition)] 
       lower_extrato=extrato_de_contrato.lower() 
       def valor(): 
        valor=["valor do contrato:","valor:"] 
        for i in valor: 
         if i in lower_extrato: 
          valor=extrato_de_contrato[lower_extrato.rfind(i)+len(i):lower_extrato.find("fonte",lower_extrato.rfind(i))] 
         while valor[-1].isdigit()==False: 
          valor=valor[:-1] 
        print("Valor Total: ", valor) 
        return valor 
       valor() 

答えて

0

Pythonはrstrip

string.rstrip('. ') 

出力でこれを行うには、内蔵の機能を持っている

'R$ 35.0123' 

最後のドットとその後のすべてを削除する必要があるように思えます。正規表現を使用

import re 
re.sub('(\.[^.]*)$', '', string) 
+0

、感謝します。問題は時には "。"、他の時は ""だけかもしれないということです。他の時は ".xzxzx"とすることができます。 – abutremutante

+0

'sep = '。''と 'maxsplit = 1 'を使って[**' str.rsplit' **](https://docs.python.org/2/library/stdtypes.html#str.rsplit) ' –

0

あなたのフォーマットに従わず、数字を含まない文字列がある可能性があります。

len(x) > 0インジケーターを追加して、ループを確保してみてください。

while len(string) > 0 and not string[-1].isdigit(): 
    del string[-1] 

あなただけの文字列から整数を抽出したい場合は、私は正規表現を示唆している:

import re 
matches = re.findall('\d+\.?\d*', string) 
string = int(matches[0]) if len(matches) > 0 else 0 
0

私が見つけました問題...良い古いインデントエラー:

代わりに:

  def valor(): 
       valor=["valor do contrato:","valor:"] 
       for i in valor: 
        if i in lower_extrato: 
         valor=extrato_de_contrato[lower_extrato.rfind(i)+len(i):lower_extrato.find("fonte",lower_extrato.rfind(i))] 
        while valor[-1].isdigit()==False: 
         valor=valor[:-1] 

それは次のように行く必要があります。そのため

ニース
  def valor(): 
       valor=["valor do contrato:","valor:"] 
       for i in valor: 
        if i in lower_extrato: 
         valor=extrato_de_contrato[lower_extrato.rfind(i)+len(i):lower_extrato.find("fonte",lower_extrato.rfind(i))] 
        --> while valor[-1].isdigit()==False: 
        -->  valor=valor[:-1] 
関連する問題