我想创建一个字符串缓冲区来做很多处理,格式化并最终使用Python风格的sprintf
功能将缓冲区写到文本文件中。因为有条件语句,所以我不能直接把它们写到文件中。
例如伪码:
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格式化的字符串。根据您的示例,buf
将只包含当前值,而不包含较旧的值。例如,首先在buf
中我写了A= something ,B= something
,后来C= something
被附加在相同的buf
中,但是在你的Python answers中buf
只包含最后的值,这不是我想要的-我希望buf
拥有我从一开始就做的所有printf
,就像在C
中一样。
发布于 2011-03-15 17:57:10
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
有关所有支持的格式说明符,请参阅此reference。
您也可以使用format
>>> print "This is the {}th tome of {}".format(5, "knowledge")
This is the 5th tome of knowledge
发布于 2011-03-15 17:53:48
如果我没理解错的话,除了its mini-language,format()就是你要找的东西。
python 2.7及更高版本的愚蠢示例:
>>> print "{} ...\r\n {}!".format("Hello", "world")
Hello ...
world!
对于早期的python版本:(使用2.6.2测试)
>>> print "{0} ...\r\n {1}!".format("Hello", "world")
Hello ...
world!
发布于 2013-08-29 23:14:57
我不能完全确定我是否理解您的目标,但您可以使用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
不同,您只需将字符串传递给buf.write
,并使用%
运算符或字符串的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
https://stackoverflow.com/questions/5309978
复制相似问题