Python相当于sprintf

时间:2012-07-29 17:23:36

标签: python hash directory

有人有一个很好的提示如何将PHP函数移植到python?

/**
 * converts id (media id) to the corresponding folder in the data-storage
 * eg: default mp3 file with id 120105 is stored in
 * /(storage root)/12/105/default.mp3
 * if absolute paths are needed give path for $base
 */

public static function id_to_location($id, $base = FALSE)
{
    $idl = sprintf("%012s",$id);
    return $base . (int)substr ($idl,0,4) . '/'. (int)substr($idl,4,4) . '/' . (int)substr ($idl,8,4);
}

5 个答案:

答案 0 :(得分:5)

对于python 2.x,您有以下选项:

[最佳选择] 较新的str.format和完整的format specification,例如

"I like {food}".format(food="chocolate")

较早的interpolation formatting语法,例如

"I like %s" % "berries"
"I like %(food)s" % {"food": "cheese"}

string.Template,例如

string.Template('I like $food').substitute(food="spinach")

答案 1 :(得分:3)

您希望在Python 3中对字符串使用format()方法:

http://docs.python.org/library/string.html#formatstrings

或检查Python 2.X的字符串插值文档

http://docs.python.org/library/stdtypes.html

答案 2 :(得分:2)

好的 - 找到了一种方法 - 我认为不是那么好但是做了......

def id_to_location(id):
    l = "%012d" % id
    return '/%d/%d/%d/' % (int(l[0:4]), int(l[4:8]), int(l[8:12]))

答案 3 :(得分:1)

在一行中,(Python 2.x):

id_to_location = lambda i: '/%d/%d/%d/' % (int(i)/1e8, int(i)%1e8/1e4, int(i)%1e4)

然后:

print id_to_location('001200230004')
'/12/23/4/'

答案 4 :(得分:0)

您可以使用默认参数引入基础。也许你想要这样:

def id_to_location(id,base=""):
   l = "%012d" % id
   return '%s/%d/%d/%d/' % (base,int(l[0:4]), int(l[4:8]), int(l[8:12]))