【发布时间】:2011-07-15 15:54:56
【问题描述】:
我想创建一个字符串缓冲区来进行大量处理、格式化,最后使用 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 将仅包含当前值,而不包含旧值。
例如,首先在buf 中我写了A= something ,B= something,后来C= something 被附加在同一个buf 中,但在你的Python 答案中buf 只包含最后一个值,这不是我想要的-我希望buf 有我从一开始就做的所有printfs,比如C。
【问题讨论】:
-
这不是 sprintf() 在 C 中的工作方式。(它将内容写入
buf的开头,而不是结尾。)使用字符串数组可能效果最好,然后在写入文件之前将它们连接在一起。 -
@dividebyzero 这在 Python 中是不是很简单,因为它是一种通用编程语言?例如,请参阅Michael J. Barber's solution(在您发表评论后发布)。
def sprintf(buf, fmt, *args): ... -
@jdk1.0 我不知道我的意思,我是一个年轻而天真的 Python 程序员......这个问题实际上很奇怪,因为这个缓冲区重用并不是那么简单,你需要用每个 sprintf 调用的输出增加一个指针,如果你在做 Python,这种事情不是你应该担心的。无论如何,我很高兴我转向了 Scala,现在转向了 Julia!