sprintf就像Python中的function一样

我想创build一个string缓冲区来执行大量的处理,格式,最后使用Python中的C风格的sprintffunction将缓冲区写入文本文件中。 由于条件语句,我不能直接写入文件。

例如伪代码:

 sprintf(buf,"A = %d\n , B= %s\n",A,B) /* some processing */ sprint(buf,"C=%d\n",c) .... ... fprintf(file,buf) 

所以在输出文件中我们有这样的o / p:

 A= foo B= bar C= ded etc... 

编辑,澄清我的问题:
buf是一个很大的缓冲区,包含所有使用sprintf格式化的string。 按照你的例子, buf将只包含当前的值,而不是老的值。 例如,先在bufA= something ,B= something稍后C= something在同一个buf添加了C= something ,但是在你的Python答案中buf只包含最后一个值,这不是我想要的 – 我希望buf将所有的printf我从一开始就做了,就像在C

Python有一个%运算符。

 >>> a = 5 >>> b = "hello" >>> buf = "A = %d\n , B = %s\n" % (a, b) >>> print buf A = 5 , B = hello >>> c = 10 >>> buf = "C = %d\n" % c >>> print buf C = 10 

请参阅此参考以了解所有支持的格式说明符。

你可以使用format

 >>> print "This is the {}th tome of {}".format(5, "knowledge") This is the 5th tome of knowledge 

如果我正确地理解了你的问题,那么format()就是你正在寻找的,以及它的迷你语言 。

python2.7及以上的傻瓜例子:

 >>> print "{} ...\r\n {}!".format("Hello", "world") Hello ... world! 

对于较早的Python版本:(用2.6.2testing)

 >>> print "{0} ...\r\n {1}!".format("Hello", "world") Hello ... world! 

我并不完全确定我理解你的目标,但是你可以使用一个StringIO实例作为缓冲区:

 >>> import StringIO >>> buf = StringIO.StringIO() >>> buf.write("A = %d, B = %s\n" % (3, "bar")) >>> buf.write("C=%d\n" % 5) >>> print(buf.getvalue()) A = 3, B = bar C=5 

sprintf不同,您只需将string传递给buf.write ,然后使用%运算符或string的format方法对其进行format

你当然可以定义一个函数来获得你所期望的sprintf接口:

 def sprintf(buf, fmt, *args): buf.write(fmt % args) 

这将使用这样的:

 >>> buf = StringIO.StringIO() >>> sprintf(buf, "A = %d, B = %s\n", 3, "foo") >>> sprintf(buf, "C = %d\n", 5) >>> print(buf.getvalue()) A = 3, B = foo C = 5 

使用格式化运算符%

 buf = "A = %d\n , B= %s\n" % (a, b) print >>f, buf 

您可以使用string格式:

 >>> a=42 >>> b="bar" >>> "The number is %d and the word is %s" % (a,b) 'The number is 42 and the word is bar' 

但是这在Python 3中被删除了,你应该使用“str.format()”:

 >>> a=42 >>> b="bar" >>> "The number is {0} and the word is {1}".format(a,b) 'The number is 42 and the word is bar' 

为了插入一个非常长的string,使用不同参数的名字是很好的,而不是希望它们处于正确的位置。 这也使得更换多个重复更容易。

 >>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W') 'Coordinates: 37.24N, -115.81W' 

从格式示例中获取 ,其中还显示了所有其他与Format相关的答案。

这可能是从C代码到Python代码最接近的翻译。

 A = 1 B = "hello" buf = "A = %d\n , B= %s\n" % (A, B) c = 2 buf += "C=%d\n" % c f = open('output.txt', 'w') print >> f, c f.close() 

Python中的%运算符与C的sprintf几乎完全一样。 您也可以直接将string打印到文件。 如果涉及到很多这样的string格式化的StringIO ,那么使用StringIO对象来加速处理时间可能是明智的。

所以,而不是做+= ,做到这一点:

 import cStringIO buf = cStringIO.StringIO() ... print >> buf, "A = %d\n , B= %s\n" % (A, B) ... print >> buf, "C=%d\n" % c ... print >> f, buf.getvalue()