用”n”位数(使用键时)格式化python字符串python 2.7

Python string formatting with 'n' number of digits (when using keys) Python 2.7

本问题已经有最佳答案,请猛点这里访问。

要在字符串格式中具有特定的位数,我知道可以这样做:

1
2
3
4
5
6
7
In [18]: hours = 01

In [19]:"%.2d" %(hours)
Out[19]: '01'

In [20]:"%.2f" %(hours)
Out[20]: '1.00'

但我的情况有点不同。我使用特定的键来表示值,例如:

1
for filename in os.listdir('/home/user/zphot_01/')

这里我想对'01'有不同的值,即

1
for filename in os.listdir('/home/user/zphot_{value1}/'.format(value1=some_number):

当我对some_number = 01使用上述方法时,它不考虑0,因此我的文件夹不被识别。

编辑:

大多数答案只针对一个值,但是,我希望有多个键值,即:

1
for filename in os.listdir('/home/user/zphot_{value1}/zphot_{value2}'.format(value1=some_number1,value2=some_number2)).


新的格式字符串语法允许您使用格式说明符,就像旧的基于%的语法一样。您可以使用的格式说明符是相似的,在所有情况下都不完全相同(我认为),但据我所知,您可以用旧语法做的任何事情也可以用新语法做。

您所要做的就是将格式说明符放在格式化表达式中,用冒号与字段名/数字隔开。在这种情况下,可以使用{value1:02d},其中02d是获得整数(d的零填充(0width-2(2表示)的代码。


有很多方法。看这个答案。

这是我的主观意见,但我已经从最坏的到最好的顺序了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> '1'.zfill(2)
'01'
>>> '%02d' % 1
'01'
>>> '%02s' % '1'
'01'
>>> '{0:0>2}'.format(1)
'01'
>>> '{0:02d}'.format(1)
'01'
>>> '{:02d}'.format(1)
'01'
>>> f'{1:02}'
'01'

然后,您必须将它与当前的字符串结合起来,没有什么真正复杂的。

编辑:

我不确定OP在他的编辑中到底要求什么,但是:

1
for filename in os.listdir('/home/user/zphot_{value1}/zphot_{value2}'.format(value1=some_number1,value2=some_number2)).

可以通过很多方式改变,我举几个例子:

1
2
3
4
5
6
7
8
9
10
11
>>> number_first, number_second = '1', '2'
>>> '/home/user/zphot_{value1}/zphot_{value2}'.format(value1 = number_first.zfill(2), value2 = '2'.zfill(2))
'/home/user/zphot_01/zphot_02'
>>> '/home/user/zphot_{}/zphot_{}'.format('1'.zfill(2), number_second.zfill(2))
'/home/user/zphot_01/zphot_02'
>>> f'/home/user/zphot_{{number_first:02}}/zphot_{2:02}'
'/home/user/zphot_01/zphot_02'    
>>> '/home/user/zphot_%02d/zphot_%02s' % (1, '2')
'/home/user/zphot_01/zphot_02'
>>> '/home/user/zphot_{:02d}/zphot_{:02d}'.format(1, 2)
'/home/user/zphot_01/zphot_02'

等。


1
2
print("{0:02}".format(1))
>>0001

刚刚从其他答案和评论中得知,我们不需要zfill,但可以使用:02这个表达式来填充。

扩展到更多位置:

1
2
print("{0:02}_{1:02}".format(1, 2))
>>0001_0002