我想在Python中编写一个函数,它将像print
那样接受参数,但不是将字符串打印到stdout,而是想将格式化的字符串写入文本文件。
如何为这样的函数参数定义接受字符串格式的参数,我想知道吗?
我正在寻找替代
的东西print "Test"
与
MyLog "Test"
但也应支持%rguments。 到目前为止,我只想出了这个:
def logger(txt):
fh = open (LOGFILE, "a") #Get handle in append mode
fh.write(txt)
fh.close()
print txt
return True
对于一个简单的字符串工作正常,但我认为它不会占用%参数,也不会像 logger“TEST”那样调用
答案 0 :(得分:5)
你可以使用" print chevron"声明做你想做的事情:
with open('filename.txt', 'w') as f:
print >> f, my_object
请参阅documentation了解print语句。
当然,使用print()
函数作为Martijn Pieters suggests可能是更好的做法。
<强>更新强>
如果我更改你的logger
函数以使用print chevron语法,我会得到这个:
def logger(txt):
fh = open (LOGFILE, "a") #Get handle in append mode
fh.write(txt)
fh.close()
print >>fh, txt
return True
如果您将此功能称为:
now, duration = 4.0, 2.0
logger("User request at %f time took %f seconds." % (now, duration))
您的日志文件中有一行如下所示:
User request at 4.0 time took 2.0 seconds.
所以你可以使用%
格式化(虽然你真的应该看一下new-style formatting),但是你不能称之为:
logger "User request at %f time took %f seconds." % (now, duration)
那是因为print是simple statement,这是一种语言级构造,你不能将它们添加到Python中。
答案 1 :(得分:4)
print()
已经允许您这样做:
print(somestring, file=someopenfile)
如果您使用的是python 2,请使用from __future__ import print_function
来获得相同的功能。
您始终可以使用与print
函数相同的参数实现一个函数,并将其用作替换函数,或使用通配符参数(*args
,**kw
),然后添加{根据需要{1}}关键字参数。您始终可以通过file
结构访问原始内置print()
功能:
__builtins__
答案 2 :(得分:1)
由于默认print
输出到sys.stdout
,您可以创建contextmanager
,如我answer中所述,这将允许您使用常规{{1}无论您使用的是语句还是函数版本。