2016-04-12 9 views
1

整数の文字列をn文字ごとに分割し、それらをUnicodeに変換しようとしています。残念ながら、私は問題を見つけました...先頭の0が文字列から削除されているので、それを処理する方法がわかりません。ここで は一例です:文字列に塗りつぶし文字を指定し、それを塊で分割する方法は?

print(num2txt(97097114103104)) 

ここでは主要な97はASCIIテーブル内の有効な数値であり、この文字列全体が正しくこのようなものに分割されるように私は、文字列の前に「0」をシンプルに追加することができます:

['097', '097', '114', '103', '104'] 

ただし、最初の3桁が実際にASCIIテーブルで有効な場合はどうなりますか?このよう :この場合

100097114103 

私はそれが

['100', '097', '114'] 

に分割することにしたいしかし、どのように、私は何かが私の関数内で発生した場合、これはもう「0」を必要としないことを確認していますか?

私の現在のコードは以下の通りです:必要なときに

def num2txt(num, k=3): 

    line = str(num) 
    line = "0" + line 
    line = [line[i:i+k] for i in range(0, len(line), k)] 

    return line 
+0

あなたはLEN(文字列(ライン))%3 – Pedru

答えて

2

ちょうど先行ゼロを追加します。

def num2txt(num, k=3): 

    line = str(num) 
    padding = len(line)%k 
    if padding: 
     line = '0'*(k-padding) + line 
    line = [line[i:i+k] for i in range(0, len(line), k)] 

    return line 
+0

の結果を確認することができ0を付加する必要があるかどうかを調べるために、そう私はその理由を考えていましたそのパディングには2つの「0」がありました。しかし、迅速な対応に感謝します。私はついにそれを得ました! –

+0

1つの簡単な質問...このようなものをエンコードすると、print(num2txt(65006600660065、k = 4))は正しく分割されません。私は彼らに0065、0066、0065のようなものにして欲しいです。しかし、コードは私に[0650]、[0660]、[0660]、 '065'] ...を与えています。 –

+0

ご迷惑をおかけして申し訳ありません。わかった。私はあなたが '00'とk = 4のときに正しく出力される '0'の場所を切り替えるようにパディングを編集することをお勧めします。ありがとうございました! –

1

私は3その後、format私の文字列の倍数に私の文字列の長さを切り上げるmath.ceilを使ってこれを行うだろう。そこからのsplit my string what other better way than using a generator function?

import math 
def num2txt(num, k): 
    num_str = "{:0>{width}}".format(num, width=math.ceil(len(str(num))/k)*k) 
    for n in range(0, len(num_str), k): 
     yield num_str[n:n+k] 

デモ:

>>> list(num2txt(97097114103104, 3)) 
['097', '097', '114', '103', '104'] 
関連する問題