首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中类似sprintf的功能

Python中类似sprintf的功能
EN

Stack Overflow用户
提问于 2011-03-15 17:49:27
回答 11查看 309.5K关注 0票数 150

我想创建一个字符串缓冲区来做很多处理,格式化并最终使用Python风格的sprintf功能将缓冲区写到文本文件中。因为有条件语句,所以我不能直接把它们写到文件中。

例如伪码:

代码语言:javascript
复制
sprintf(buf,"A = %d\n , B= %s\n",A,B)
/* some processing */
sprint(buf,"C=%d\n",c)
....
...
fprintf(file,buf)

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

代码语言:javascript
复制
A= foo B= bar
C= ded
etc...

编辑,澄清我的问题:

buf是一个很大的缓冲区,其中包含所有这些使用sprintf格式化的字符串。根据您的示例,buf将只包含当前值,而不包含较旧的值。例如,首先在buf中我写了A= something ,B= something,后来C= something被附加在相同的buf中,但是在你的Python answers中buf只包含最后的值,这不是我想要的-我希望buf拥有我从一开始就做的所有printf,就像在C中一样。

EN

回答 11

Stack Overflow用户

发布于 2011-03-15 17:57:10

Python为此提供了一个%操作符。

代码语言:javascript
复制
>>> 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

代码语言:javascript
复制
>>> print "This is the {}th tome of {}".format(5, "knowledge")
This is the 5th tome of knowledge
票数 191
EN

Stack Overflow用户

发布于 2011-03-15 17:53:48

如果我没理解错的话,除了its mini-languageformat()就是你要找的东西。

python 2.7及更高版本的愚蠢示例:

代码语言:javascript
复制
>>> print "{} ...\r\n {}!".format("Hello", "world")
Hello ...
 world!

对于早期的python版本:(使用2.6.2测试)

代码语言:javascript
复制
>>> print "{0} ...\r\n {1}!".format("Hello", "world")
Hello ...
 world!
票数 42
EN

Stack Overflow用户

发布于 2013-08-29 23:14:57

我不能完全确定我是否理解您的目标,但您可以使用StringIO实例作为缓冲区:

代码语言:javascript
复制
>>> 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接口:

代码语言:javascript
复制
def sprintf(buf, fmt, *args):
    buf.write(fmt % args)

它的用法如下:

代码语言:javascript
复制
>>> 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
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5309978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档