Python中的sprintf类似功能

2024-06-28 19:49:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个字符串缓冲区来进行大量的处理、格式化,最后使用Python中的C样式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将只包含当前值,而不包含旧值。 e、 g first in buf我写的A= something ,B= something后来C= something被附加在相同的buf中,但是在您的Python答案中buf只包含最后一个值,这不是我想要的-我想要buf拥有我从一开始就做的所有printfs,比如C


Tags: 文件字符串代码功能样式some语句条件
3条回答

如果我正确理解你的问题,format()是你要找的,还有its mini-language

Python2.7及更高版本的愚蠢示例:

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

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

>>> 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不同,您只需将字符串传递给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

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

你也可以使用^{}

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

相关问题 更多 >