将整数格式化为带有前导零的字符串的最佳方法?

发布于 2024-07-17 05:55:28 字数 283 浏览 7 评论 0原文

我需要向整数添加前导零以生成具有定义的数字数量($cnt)的字符串。 将这个简单函数从 PHP 转换为 Python 的最佳方法是什么:

function add_nulls($int, $cnt=2) {
    $int = intval($int);
    for($i=0; $i<($cnt-strlen($int)); $i++)
        $nulls .= '0';
    return $nulls.$int;
}

有一个函数可以做到这一点吗?

I need to add leading zeros to integer to make a string with defined quantity of digits ($cnt).
What the best way to translate this simple function from PHP to Python:

function add_nulls($int, $cnt=2) {
    $int = intval($int);
    for($i=0; $i<($cnt-strlen($int)); $i++)
        $nulls .= '0';
    return $nulls.$int;
}

Is there a function that can do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

哽咽笑 2024-07-24 05:55:28

您可以使用 zfill() 方法用零填充字符串:

In [3]: str(1).zfill(2)
Out[3]: '01'

You can use the zfill() method to pad a string with zeros:

In [3]: str(1).zfill(2)
Out[3]: '01'
遇见了你 2024-07-24 05:55:28

标准方法是使用格式字符串修饰符。 这些格式字符串方法在大多数编程语言中都可用(例如通过 c 中的 sprintf 函数),并且是一个值得了解的方便工具。

要输出长度为 5 的字符串:


... 在 Python 3.5 及更高版本中:f-strings。

i = random.randint(0, 99999)
print(f'{i:05d}')

搜索 f-strings 此处了解更多详细信息。


... Python 2.6 及更高版本:

print '{0:05d}'.format(i)

... Python 2.6 之前:

print "%05d" % i

请参阅: https:// docs.python.org/3/library/string.html

The standard way is to use format string modifiers. These format string methods are available in most programming languages (via the sprintf function in c for example) and are a handy tool to know about.

To output a string of length 5:


... in Python 3.5 and above: f-strings.

i = random.randint(0, 99999)
print(f'{i:05d}')

Search for f-strings here for more details.


... Python 2.6 and above:

print '{0:05d}'.format(i)

... before Python 2.6:

print "%05d" % i

See: https://docs.python.org/3/library/string.html

并安 2024-07-24 05:55:28

Python 3.6 f-strings 允许我们轻松添加前导零:

number = 5
print(f' now we have leading zeros in {number:02d}')

看看这篇好文章 关于此功能。

Python 3.6 f-strings allows us to add leading zeros easily:

number = 5
print(f' now we have leading zeros in {number:02d}')

Have a look at this good post about this feature.

素染倾城色 2024-07-24 05:55:28

您很可能只需要格式化您的整数:

'%0*d' % (fill, your_int)

例如,

>>> '%0*d' % (3, 4)
'004'

You most likely just need to format your integer:

'%0*d' % (fill, your_int)

For example,

>>> '%0*d' % (3, 4)
'004'
两个我 2024-07-24 05:55:28

Python 2.6 允许这样做:

add_nulls = lambda number, zero_count : "{0:0{1}d}".format(number, zero_count)

>>>add_nulls(2,3)
'002'

Python 2.6 allows this:

add_nulls = lambda number, zero_count : "{0:0{1}d}".format(number, zero_count)

>>>add_nulls(2,3)
'002'
沙沙粒小 2024-07-24 05:55:28

对于 Python 3 及更高版本:
str.zfill() 仍然是最具可读性的选项,

但是研究一下新的、强大的 str.format() 是个好主意,如果你想填充不为 0 的东西怎么办?

    # if we want to pad 22 with zeros in front, to be 5 digits in length:
    str_output = '{:0>5}'.format(22)
    print(str_output)
    # >>> 00022
    # {:0>5} meaning: ":0" means: pad with 0, ">" means move 22 to right most, "5" means the total length is 5

    # another example for comparision
    str_output = '{:#<4}'.format(11)
    print(str_output)
    # >>> 11##

    # to put it in a less hard-coded format:
    int_inputArg = 22
    int_desiredLength = 5
    str_output = '{str_0:0>{str_1}}'.format(str_0=int_inputArg, str_1=int_desiredLength)
    print(str_output)
    # >>> 00022

For Python 3 and beyond:
str.zfill() is still the most readable option

But it is a good idea to look into the new and powerful str.format(), what if you want to pad something that is not 0?

    # if we want to pad 22 with zeros in front, to be 5 digits in length:
    str_output = '{:0>5}'.format(22)
    print(str_output)
    # >>> 00022
    # {:0>5} meaning: ":0" means: pad with 0, ">" means move 22 to right most, "5" means the total length is 5

    # another example for comparision
    str_output = '{:#<4}'.format(11)
    print(str_output)
    # >>> 11##

    # to put it in a less hard-coded format:
    int_inputArg = 22
    int_desiredLength = 5
    str_output = '{str_0:0>{str_1}}'.format(str_0=int_inputArg, str_1=int_desiredLength)
    print(str_output)
    # >>> 00022
小女人ら 2024-07-24 05:55:28

您至少有两个选择:

  • str.zfill: lambda n, cnt=2: str(n).zfill(cnt)
  • % 格式化: lambda n, cnt=2: "%0*d" % (cnt, n)

如果在 Python >2.5 上,请参阅 clorz 答案中的第三个选项。

You have at least two options:

  • str.zfill: lambda n, cnt=2: str(n).zfill(cnt)
  • % formatting: lambda n, cnt=2: "%0*d" % (cnt, n)

If on Python >2.5, see a third option in clorz's answer.

情深缘浅 2024-07-24 05:55:28

内置 zfill 的单行替代方案。

该函数接受 x 并将其转换为字符串,并且仅在长度太短的情况下在开头添加零:

def zfill_alternative(x,len=4): return ( (('0'*len)+str(x))[-l:] if len(str(x))<len else str(x) )

总结一下 - 内置:zfill > 已经足够好了,但是如果有人对如何手动实现这一点感到好奇,这里还有一个例子。

One-liner alternative to the built-in zfill.

This function takes x and converts it to a string, and adds zeros in the beginning only and only if the length is too short:

def zfill_alternative(x,len=4): return ( (('0'*len)+str(x))[-l:] if len(str(x))<len else str(x) )

To sum it up - build-in: zfill is good enough, but if someone is curious on how to implement this by hand, here is one more example.

糖粟与秋泊 2024-07-24 05:55:28

一个简单的转换是(同样使用函数):

def add_nulls2(int, cnt):
    nulls = str(int)
    for i in range(cnt - len(str(int))):
        nulls = '0' + nulls
    return nulls

A straightforward conversion would be (again with a function):

def add_nulls2(int, cnt):
    nulls = str(int)
    for i in range(cnt - len(str(int))):
        nulls = '0' + nulls
    return nulls
无边思念无边月 2024-07-24 05:55:28

这是我的 Python 函数:

def add_nulls(num, cnt=2):
  cnt = cnt - len(str(num))
  nulls = '0' * cnt
  return '%s%s' % (nulls, num)

This is my Python function:

def add_nulls(num, cnt=2):
  cnt = cnt - len(str(num))
  nulls = '0' * cnt
  return '%s%s' % (nulls, num)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文