Python 如何将填充字符指定为字符串并按块分割?
我试图将一个整数字符串按每n个字符拆分,然后将其转换为unicode。不幸的是,我遇到了一个问题。。。由于前导0已从字符串中删除,因此我对如何处理它们感到困惑。 以下是一个例子:Python 如何将填充字符指定为字符串并按块分割?,python,string,python-3.x,Python,String,Python 3.x,我试图将一个整数字符串按每n个字符拆分,然后将其转换为unicode。不幸的是,我遇到了一个问题。。。由于前导0已从字符串中删除,因此我对如何处理它们感到困惑。 以下是一个例子: print(num2txt(97097114103104)) 在这里,前导97是ASCII表中的一个有效数字,我可以简单地在字符串之前添加一个“0”,这样整个字符串将正确地拆分为如下内容: ['097', '097', '114', '103', '104'] 但是,如果前三位数字在ASCII表中实际有效怎么办?
print(num2txt(97097114103104))
在这里,前导97是ASCII表中的一个有效数字,我可以简单地在字符串之前添加一个“0”,这样整个字符串将正确地拆分为如下内容:
['097', '097', '114', '103', '104']
但是,如果前三位数字在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
必要时只需添加前导零
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
我会使用将字符串的长度四舍五入到3
的倍数,然后是我的字符串。从那里到
演示:
若要确定是否需要预加0,可以检查len(str(line))的结果%3是的,我在想为什么填充中有两个“0”。但是谢谢你的及时回复。我终于明白了!一个简单的问题。。。如果我遇到这样的东西:print(num2txt(650066600660065,k=4)),它将无法正确地分割它们。我希望它们是0065,0066,0065这样的东西。但是代码给了我['0650'、'0660'、'0660'、'065']……有什么想法吗?很抱歉打扰你。我得到了它。我建议您可能需要编辑填充以切换“00”和“0”的位置,当k=4时,这两个位置将正确输出。谢谢大家!@哈利伦-我的道歉;我已经在一般情况下修复了它(请参见编辑)。谢谢!我试着做一些类似的事情。
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']